minmax.c

Go to the documentation of this file.
00001 #include "scicos_block.h"
00002 #include <math.h>
00003 
00004 void minmax(scicos_block *block,int flag)
00005 { /*ipar[0]=1 -> min,  ipar[0]=2 -> max */
00006   
00007   int i,phase;
00008   double maxmin;
00009   phase=get_phase_simulation();
00010   if (flag == 1) {
00011     if(block->nin==1){
00012       if((block->ng==0)||(phase==1)){
00013         maxmin=block->inptr[0][0];
00014         for (i=1;i<block->insz[0];++i){
00015           if(block->ipar[0]==1){
00016             if(block->inptr[0][i]<maxmin)  maxmin=block->inptr[0][i];
00017           } else {
00018             if(block->inptr[0][i]>maxmin)  maxmin=block->inptr[0][i];
00019           }
00020         }
00021       }else{
00022         maxmin=block->inptr[0][block->mode[0]-1];
00023       }
00024       block->outptr[0][0]=maxmin;
00025 
00026     }else if (block->nin==2){
00027       for (i=0;i<block->insz[0];++i){
00028         if((block->ng==0)||(phase==1)){
00029           if(block->ipar[0]==1){
00030             block->outptr[0][i]=min(block->inptr[0][i],block->inptr[1][i]);
00031           } else {
00032             block->outptr[0][i]=max(block->inptr[0][i],block->inptr[1][i]);
00033           }
00034         }else{
00035           block->outptr[0][i]=block->inptr[block->mode[0]-1][i];
00036         }
00037       }
00038     }
00039   } else if(flag == 9){
00040     if(block->nin==1){
00041       if(block->nin==1){
00042         if (phase==2){
00043           for (i=0;i<block->insz[0];++i){
00044             if(i!=block->mode[0]-1){
00045               block->g[i]=block->inptr[0][i]-block->inptr[0][block->mode[0]-1];
00046             }else{
00047               block->g[i]=1.0;
00048             }
00049           }
00050         } else if (phase==1){
00051           maxmin=block->inptr[0][0];
00052           for (i=1;i<block->insz[0];++i){
00053             block->mode[0]=1;
00054             if(block->ipar[0]==1){
00055               if(block->inptr[0][i]<maxmin) {
00056                 maxmin=block->inptr[0][i];
00057                 block->mode[0]=i+1;
00058               }
00059             } else {
00060               if(block->inptr[0][i]>maxmin) {
00061                 maxmin=block->inptr[0][i];
00062                 block->mode[0]=i+1;
00063               }
00064             }
00065           }
00066         }
00067       }
00068     }else if(block->nin==2){
00069       for (i=0;i<block->insz[0];++i){
00070         block->g[i]=block->inptr[0][i]-block->inptr[1][i];
00071         if(phase==1){
00072           if(block->ipar[0]==1){
00073             if(block->g[i]>0) {
00074               block->mode[i]=2;
00075             }else{
00076               block->mode[i]=1;
00077             }
00078           }else{
00079             if(block->g[i]<0) {
00080               block->mode[i]=2;
00081             }else{
00082               block->mode[i]=1;
00083             }
00084           }
00085         }
00086       }
00087     }
00088   }
00089 }
00090 

Generated on Sun Mar 4 15:03:59 2007 for Scilab [trunk] by  doxygen 1.5.1