############################################ ########## SET SITE DIRECTORIES ########## ############################################ sub site_directories () { ### SET SITE-DEPENDENT BASEDIR FOR APACHE SERVER RUN ### (USED AS GLOBAL VARIABLES) if ( ! defined $ENV{'HOME'} ) { $ENV{'HOME'} = '/home/lyusupov' ; } else { ### UNTAINT ENVIRON VARIABLE if ( $ENV{'HOME'} =~ m|^([A-Za-z0-9/][A-Za-z0-9_.:/-]*)$| ) { $ENV{'HOME'} = $1 ; } # filename chars only } $HOME = $ENV{'HOME'}; $BASEDIR = "$ENV{'HOME'}/WEATHER"; } ############################################# ########## SET REGION PARAMETERS ########## ############################################# sub region_params () { my ($REGION) = @_; my $routinename = 'region_params' ; my ( $localtime_id, $localtime_adj ); if( $REGION eq 'OREL' || $REGION eq 'OREL+1' || $REGION eq 'OREL+2' || $REGION eq 'OREL+3' || $REGION eq 'SP_OREL') { $localtime_id = 'MSK' ; $localtime_adj = +3 ; } elsif( $REGION eq 'MOSCOW' || $REGION eq 'MOSCOW+1') { $localtime_id = 'MSK' ; $localtime_adj = +3 ; } elsif( $REGION eq 'KAZAN' || $REGION eq 'SP_KAZAN') { $localtime_id = 'MSK' ; $localtime_adj = +3 ; } elsif( $REGION eq 'NOVO' || $REGION eq 'SP_NOVO') { $localtime_id = 'NSK' ; # $localtime_adj = +6 ; $localtime_adj = +7 ; } elsif( $REGION eq 'VLADIK' ) { $localtime_id = 'MSK' ; $localtime_adj = +3 ; } elsif( $REGION eq 'SPETER' ) { $localtime_id = 'MSK' ; $localtime_adj = +3 ; } elsif( $REGION eq 'CRUS' || $REGION eq 'CRUS+1') { $localtime_id = 'MSK' ; $localtime_adj = +3 ; } else { die "*** $routinename ERROR EXIT: unknown region = $REGION"; } return ( $localtime_id, $localtime_adj ); } ########################################### ########## SET GRID PARAMETERS ########## ########################################### sub grid_params () { my ($REGION,$GRID) = @_; my $routinename = 'grid_params' ; my ( $grid_imin,$grid_imax, $grid_jmin,$grid_jmax ) ; $grid_imin = 1 ; $grid_jmin = 1 ; ### "$grid_imax" VALUES OBTAINED BY SUBTRACTING 1 FROM "e_we" VALUES IN $BASEDIR/WRF/WRFV2/RASP/REGIONXYZ/namelist.template ### "$grid_jmax" VALUES OBTAINED BY SUBTRACTING 1 FROM "e_sn" VALUES IN $BASEDIR/WRF/WRFV2/RASP/REGIONXYZ/namelist.template ### *** N*B *** DATAFILE GRID INDEX MAX IS ONE LESS THAN THAT OF WRF INIT FILE !!! if( $REGION eq 'OREL' || $REGION eq 'OREL+1' || $REGION eq 'OREL+2' || $REGION eq 'OREL+3' || $REGION eq 'SP_OREL') { if( $GRID eq 'd1' || $GRID eq '1' ) { ### SET GRID SIZE $grid_imax = 37 ; $grid_jmax = 37 ; } elsif( $GRID eq 'd2' || $GRID eq 'w1' || $GRID eq '2' ) { ### SET GRID SIZE $grid_imax = 45 ; $grid_jmax = 45 ; } elsif( $GRID eq 'w2' || $GRID eq '3' ) { ### SET GRID SIZE $grid_imax = 51 ; $grid_jmax = 51 ; } else { die "*** $routinename ERROR EXIT: $REGION unknown grid = $GRID"; } } elsif( $REGION eq 'MOSCOW' || $REGION eq 'MOSCOW+1') { if( $GRID eq 'd1' || $GRID eq '1' ) { ### SET GRID SIZE $grid_imax = 47 ; $grid_jmax = 47 ; } elsif( $GRID eq 'd2' || $GRID eq 'w1' || $GRID eq '2' ) { ### SET GRID SIZE $grid_imax = 57 ; $grid_jmax = 57 ; } elsif( $GRID eq 'w2' || $GRID eq '3' ) { ### SET GRID SIZE $grid_imax = 66 ; $grid_jmax = 111 ; } else { die "*** $routinename ERROR EXIT: $REGION unknown grid = $GRID"; } } elsif( $REGION eq 'KAZAN' || $REGION eq 'SP_KAZAN') { if( $GRID eq 'd1' || $GRID eq '1' ) { ### SET GRID SIZE $grid_imax = 54 ; $grid_jmax = 56 ; } elsif( $GRID eq 'd2' || $GRID eq 'w1' || $GRID eq '2' ) { ### SET GRID SIZE $grid_imax = 54 ; $grid_jmax = 54 ; } elsif( $GRID eq 'w2' || $GRID eq '3' ) { ### SET GRID SIZE $grid_imax = 66 ; $grid_jmax = 111 ; } else { die "*** $routinename ERROR EXIT: $REGION unknown grid = $GRID"; } } elsif( $REGION eq 'NOVO' || $REGION eq 'SP_NOVO') { if( $GRID eq 'd1' || $GRID eq '1' ) { ### SET GRID SIZE $grid_imax = 51 ; $grid_jmax = 55 ; } elsif( $GRID eq 'd2' || $GRID eq 'w1' || $GRID eq '2' ) { ### SET GRID SIZE $grid_imax = 57 ; $grid_jmax = 57 ; } elsif( $GRID eq 'w2' || $GRID eq '3' ) { ### SET GRID SIZE $grid_imax = 66 ; $grid_jmax = 111 ; } else { die "*** $routinename ERROR EXIT: $REGION unknown grid = $GRID"; } } elsif( $REGION eq 'VLADIK' ) { if( $GRID eq 'd1' || $GRID eq '1' ) { ### SET GRID SIZE $grid_imax = 47 ; $grid_jmax = 47 ; } elsif( $GRID eq 'd2' || $GRID eq 'w1' || $GRID eq '2' ) { ### SET GRID SIZE $grid_imax = 51 ; $grid_jmax = 51 ; } elsif( $GRID eq 'w2' || $GRID eq '3' ) { ### SET GRID SIZE $grid_imax = 66 ; $grid_jmax = 111 ; } else { die "*** $routinename ERROR EXIT: $REGION unknown grid = $GRID"; } } elsif( $REGION eq 'SPETER' ) { if( $GRID eq 'd1' || $GRID eq '1' ) { ### SET GRID SIZE $grid_imax = 47 ; $grid_jmax = 47 ; } elsif( $GRID eq 'd2' || $GRID eq 'w1' || $GRID eq '2' ) { ### SET GRID SIZE $grid_imax = 48 ; $grid_jmax = 48 ; } elsif( $GRID eq 'w2' || $GRID eq '3' ) { ### SET GRID SIZE $grid_imax = 66 ; $grid_jmax = 111 ; } else { die "*** $routinename ERROR EXIT: $REGION unknown grid = $GRID"; } } elsif( $REGION eq 'CRUS' || $REGION eq 'CRUS+1') { if( $GRID eq 'd1' || $GRID eq '1' ) { ### SET GRID SIZE $grid_imax = 149 ; $grid_jmax = 149 ; } elsif( $GRID eq 'd2' || $GRID eq 'w1' || $GRID eq '2' ) { ### SET GRID SIZE $grid_imax = 159 ; $grid_jmax = 159 ; } elsif( $GRID eq 'w2' || $GRID eq '3' ) { ### SET GRID SIZE $grid_imax = 81 ; $grid_jmax = 81 ; } else { die "*** $routinename ERROR EXIT: $REGION unknown grid = $GRID"; } } else { die "*** $routinename ERROR EXIT: unknown region = $REGION"; } return ( $grid_imin,$grid_imax, $grid_jmin,$grid_jmax ) ; } ############################################ ########## SET IMAGE PARAMETERS ########## ############################################ sub image_params () { my ($REGION,$GRID) = @_; my $routinename = 'image_params' ; my ( $image_mapwidth,$image_mapheight, $image_maporiginx, $image_maporiginy ); ### GRID 2 VALUES OBTAINED BY FINDING LINES ala "VIEWPORT: 0.602933x0.82@0.198534,0.89" in $BASEDIR/WRF/NCL/rasp.ncl.out.REGIONXYZ.02 ### GRID 3 VALUES OBTAINED BY FINDING LINES ala "VIEWPORT: 0.602933x0.82@0.198534,0.89" in $BASEDIR/WRF/NCL/rasp.ncl.out.REGIONXYZ-WINDOW.02 ### where the VIEWPORT values represent: $image_mapwidth x $image_mapheight @ $image_maporiginx , $image_maporiginy if( $REGION eq 'OREL' || $REGION eq 'OREL+1' || $REGION eq 'OREL+2' || $REGION eq 'OREL+3' || $REGION eq 'SP_OREL') { if( $GRID eq 'd1' || $GRID eq '1' ) { die "$routinename - no data for $REGION $GRID "; } elsif( $GRID eq 'd2' || $GRID eq 'w1' || $GRID eq '2' ) { ### SET IMAGE VIEWPORT SIZE, ORIGIN ### here "map" is same as "viewport", with values between 0.0 and 1.0 $image_mapwidth = 0.82 ; $image_mapheight = 0.82 ; $image_maporiginx = 0.09 ; $image_maporiginy = 0.89 ; } elsif( $GRID eq 'w2' || $GRID eq '3' ) { ### SET IMAGE VIEWPORT SIZE, ORIGIN ### here "map" is same as "viewport", with values between 0.0 and 1.0 $image_mapwidth = 0.82 ; $image_mapheight = 0.7478 ; $image_maporiginx = 0.09 ; $image_maporiginy = 0.8539 ; } else { die "*** $routinename ERROR EXIT: $REGION unknown grid = $GRID"; } } elsif( $REGION eq 'MOSCOW' || $REGION eq 'MOSCOW+1') { if( $GRID eq 'd1' || $GRID eq '1' ) { die "$routinename - no data for $REGION $GRID "; } elsif( $GRID eq 'd2' || $GRID eq 'w1' || $GRID eq '2' ) { ### SET IMAGE VIEWPORT SIZE, ORIGIN ### here "map" is same as "viewport", with values between 0.0 and 1.0 $image_mapwidth = 0.82 ; $image_mapheight = 0.82 ; $image_maporiginx = 0.09 ; $image_maporiginy = 0.89 ; } elsif( $GRID eq 'w2' || $GRID eq '3' ) { die "$routinename - no data for $REGION $GRID "; } else { die "*** $routinename ERROR EXIT: $REGION unknown grid = $GRID"; } } elsif( $REGION eq 'KAZAN' || $REGION eq 'SP_KAZAN') { if( $GRID eq 'd1' || $GRID eq '1' ) { die "$routinename - no data for $REGION $GRID "; } elsif( $GRID eq 'd2' || $GRID eq 'w1' || $GRID eq '2' ) { ### SET IMAGE VIEWPORT SIZE, ORIGIN ### here "map" is same as "viewport", with values between 0.0 and 1.0 $image_mapwidth = 0.82 ; $image_mapheight = 0.82 ; $image_maporiginx = 0.09 ; $image_maporiginy = 0.89 ; } elsif( $GRID eq 'w2' || $GRID eq '3' ) { die "$routinename - no data for $REGION $GRID "; } else { die "*** $routinename ERROR EXIT: $REGION unknown grid = $GRID"; } } elsif( $REGION eq 'NOVO' || $REGION eq 'SP_NOVO') { if( $GRID eq 'd1' || $GRID eq '1' ) { die "$routinename - no data for $REGION $GRID "; } elsif( $GRID eq 'd2' || $GRID eq 'w1' || $GRID eq '2' ) { ### SET IMAGE VIEWPORT SIZE, ORIGIN ### here "map" is same as "viewport", with values between 0.0 and 1.0 $image_mapwidth = 0.82 ; $image_mapheight = 0.82 ; $image_maporiginx = 0.09 ; $image_maporiginy = 0.89 ; } elsif( $GRID eq 'w2' || $GRID eq '3' ) { die "$routinename - no data for $REGION $GRID "; } else { die "*** $routinename ERROR EXIT: $REGION unknown grid = $GRID"; } } elsif( $REGION eq 'VLADIK' ) { if( $GRID eq 'd1' || $GRID eq '1' ) { die "$routinename - no data for $REGION $GRID "; } elsif( $GRID eq 'd2' || $GRID eq 'w1' || $GRID eq '2' ) { ### SET IMAGE VIEWPORT SIZE, ORIGIN ### here "map" is same as "viewport", with values between 0.0 and 1.0 $image_mapwidth = 0.82 ; $image_mapheight = 0.82 ; $image_maporiginx = 0.09 ; $image_maporiginy = 0.89 ; } elsif( $GRID eq 'w2' || $GRID eq '3' ) { die "$routinename - no data for $REGION $GRID "; } else { die "*** $routinename ERROR EXIT: $REGION unknown grid = $GRID"; } } elsif( $REGION eq 'SPETER' ) { if( $GRID eq 'd1' || $GRID eq '1' ) { die "$routinename - no data for $REGION $GRID "; } elsif( $GRID eq 'd2' || $GRID eq 'w1' || $GRID eq '2' ) { ### SET IMAGE VIEWPORT SIZE, ORIGIN ### here "map" is same as "viewport", with values between 0.0 and 1.0 $image_mapwidth = 0.82 ; $image_mapheight = 0.82 ; $image_maporiginx = 0.09 ; $image_maporiginy = 0.89 ; } elsif( $GRID eq 'w2' || $GRID eq '3' ) { die "$routinename - no data for $REGION $GRID "; } else { die "*** $routinename ERROR EXIT: $REGION unknown grid = $GRID"; } } elsif( $REGION eq 'CRUS' || $REGION eq 'CRUS+1') { if( $GRID eq 'd1' || $GRID eq '1' ) { die "$routinename - no data for $REGION $GRID "; } elsif( $GRID eq 'd2' || $GRID eq 'w1' || $GRID eq '2' ) { ### SET IMAGE VIEWPORT SIZE, ORIGIN ### here "map" is same as "viewport", with values between 0.0 and 1.0 $image_mapwidth = 0.82 ; $image_mapheight = 0.82 ; $image_maporiginx = 0.09 ; $image_maporiginy = 0.89 ; } elsif( $GRID eq 'w2' || $GRID eq '3' ) { ### SET IMAGE VIEWPORT SIZE, ORIGIN ### here "map" is same as "viewport", with values between 0.0 and 1.0 $image_mapwidth = 0.82 ; $image_mapheight = 0.82 ; $image_maporiginx = 0.09 ; $image_maporiginy = 0.89 ; } else { die "*** $routinename ERROR EXIT: $REGION unknown grid = $GRID"; } } else { die "*** $routinename ERROR EXIT: unknown region = $REGION"; } return ( $image_mapwidth,$image_mapheight, $image_maporiginx, $image_maporiginy ); } ### FILE MUST END WITH FOLLOWING LINE: 1;