00001 #include "scicos_block.h"
00002 #include <math.h>
00003
00004 void minmax(scicos_block *block,int flag)
00005 {
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