亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? namelist.pm

?? CCSM Research Tools: Community Atmosphere Model (CAM)
?? PM
字號:
##	namelist.pm			Erik Kluzek##	Perl module to deal with FORTRAN namelists.##------------------------------------------------------------------------##	Description of methods:##	new ----------------------- Constructor#	change -------------------- Interactively change values in the namelist#	checkstring --------------- Check that a string namelist item is handled correctly.#	print --------------------- Print namelist to screen.#	Write --------------------- Write the namelist out.#	convert_case -------------- Convert the keys to lowercase.#	parse --------------------- Parse a namelist file into a Perl associative array.##	$Id: namelist.pm,v 1.1.6.1 2002/05/13 17:21:27 eaton Exp $#use strict;#use diagnostics;use Cwd;package namelist;# Some data to make global within this package, but local to inside it## Perl expression to match a fortran variable#$namelist::varmatch = "[A-Za-z_]+[A-Za-z0-9_%()]*";    # % for derived types, () for arrays## Perl pattern to match the value for a fortran constant## Match for logical data$namelist::vallogical = "\\.[Tt][Rr][Uu][Ee]\\.|\\.[Ff][Aa][Ll][Ss][Ee]\\.";# Match for integer data$namelist::valint = "[+-]?[0-9]+";# Match for real data# "_" are for f90 precision specification$namelist::valreal = "$namelist::valint\\.?[0-9]*[Ee]?[0-9+-]*_?[0-9a-z_]*";# Match for string data# One problem with below is strings that have \" or \' in them$namelist::valstring = '\'[^\']+\'|"[^"]+"';# Match for complex data$namelist::valcomplex = "\\($namelist::valreal,$namelist::valreal\\)";# Match for all valid data-types: integer, real, complex, logical, or string data$namelist::valmatch = "$namelist::vallogical|$namelist::valstring|$namelist::valreal|$namelist::valint|$namelist::valcomplex";# Same as above when a match isn't required$namelist::nrvalmatch = $namelist::valmatch. "||";## This script takes the %main::CCMEXP associative array and stores the keys in# Lower case to the following lowercase copies. It uses the values passed in# and sets needed default values based on configuration variables. Then it writes out# a namelist according to the corresponding resultant associative array.#sub new {## Constructor: usage: my $nl = namelist->new( "CCMEXP", "nl.initial", %main::CCMEXP );#  my $class = shift;  my $name  = shift;  my $file  = shift;  my $NLref = shift;  my $printlev = shift;  my $self  = {};  if ( ! defined($name) ) {    die "ERROR:: name not given to namelist constructor\n";  }  if ( ! defined($file) ) {    die "ERROR:: filename not given to namelist constructor\n";  }  if ( ! defined($NLref) || $NLref !~ /HASH/ ) {    die "ERROR:: reference to namelist associative array not given to namelist constructor\n";  }  $self->{'FILENAME'} = $file;                    # Filename of output namelist  $self->{'NLREF'}    = $NLref;                   # Reference to namelist  $self->{'NAME'}     = $name;                    # the name of the namelist  $self->{'printlev'} = $printlev;  $self->{'VAR'}      = undef;                    # Variable name when parsing  $self->{'VALUE'}    = undef;                    # Variable value when parsing  bless( $self, $class );  return( $self );}#============================================================================sub change {## Make changes to the namelist#  my $self = shift;  my $ref = $self->{'NLREF'};  my $name = $self->{'NAME'};  print "Here is the $name namelist:\n";  $self->print;  print "Do you want to add or change any settings? (y/n):";  $_ = <>;   if ( /[yY][Ee]*[sS]*/ ) {    print "Enter changes as: key = value (return to finish)\n";    print "(Be sure and put \' around string values)\n";    my $match = "^\\s*($namelist::varmatch)\\s*=\\s*($namelist::valmatch";    $match = $match . ")[\\s,]*(.*?\$)";    while( defined($_ = <> ) && (/./) ) {      if ( /$match/ ) {        $$ref{$1} = $2;      } else {        print "Warning:: bad input: enter as: key = value :: key and value should conform to f90 rules\n";      }    }    print "Ok, here is the new $name namelist:\n";    $self->print;  }}#============================================================================sub checkstring {## Check that a string namelist item is handled correctly#  my $self = shift;  my $item = shift;  my $EXPNLref = $self->{'NLREF'};  my %EXPNL = %$EXPNLref;  my $name = $EXPNL{$item};  if ( $name !~ /\'(.+)\'/ ) {    die "$item needs \' around the value";  }}#============================================================================sub split_namelist_value {## Return a namelist value split up if longer than 70 characters#  my $self = shift;  my $value = shift;  if ( length($value) > 70 ) {    my $originalvalue = $value;    my $expect = "value";    my @list;    while ( $value =~ /./ ) {       $self->parse_next( \$value, \$expect ) ;      push( @list, $self->{VALUE} );      $expect = "value";    }    my $numberonline = ( 70*($#list+1) ) / length($originalvalue);    my $i = 0;    $value = shift @list;    foreach my $item ( @list ) {      $value = $value . ", $item";      if ( ++$i >= $numberonline ) {        $value = $value . "\n         ";        $i = 0;      }    }  }  return( $value );}#============================================================================sub print {## Print the namelist out#  my $self = shift;  my $ref = $self->{'NLREF'};  my $key;  my %namelist = %$ref;  foreach $key ( sort( keys(%namelist) ) ) {    if ( defined($namelist{$key}) ) {      my $value = $self->split_namelist_value( $namelist{$key} );      print " $key = $value\n";    }  }}#============================================================================sub Write {## Write out the namelist based on values set in the associative# arrays#  my $self = shift;  my $append = shift;  my $ref = $self->{'NLREF'};  my %namelist = %$ref;  my $name = $self->{'NAME'};  my $file = $self->{'FILENAME'};  if ( defined($append) && $append =~ /Append/i ) {    open( OUT, ">>$file" ) || die "Can not open namelist file: $file";  } else {    if ( -f $file ) { unlink( $file ); }    open( OUT, ">$file" ) || die "Can not open namelist file: $file";  }  print OUT "&$name\n";  my $key;  foreach $key ( sort( keys(%namelist) ) ) {    if ( defined($namelist{$key}) ) {      my $value = $self->split_namelist_value( $namelist{$key} );      print OUT " $key\t\t= $value\n";    }  }  print OUT "/\n";  close( OUT );}#============================================================================sub convert_case {## Convert the case of the keys in the main associative arrays to lowercase.# Also terminate if there are two keys with the same name but different case.#  my $self = shift;  my $class = ref($self);  my $nm = "$class\:\:convert_case";  my $ref = $self->{'NLREF'};  my $key;  foreach $key ( keys(%$ref) ) {    if ( defined($$ref{$key}) ) {      my $lckey = $key;      $lckey =~ tr/[A-Z]/[a-z]/;      my $value = $$ref{$key};      if ( $key ne $lckey && defined($$ref{$lckey}) ) {        print "$lckey already defined\n";        die "$nm: Fix your namelist so that two definitions of $lckey do not exist";      }      $$ref{$key}   = undef;      $$ref{$lckey} = $value;    }  }}#============================================================================sub parse {## Parse the namelist from a file#  my $self = shift;  my $filename = shift;  my $class = ref($self);  my $nm = "$class\:\:parse";  my $name = $self->{'NAME'};  if ( ! defined( $filename ) ) {    die "ERROR($nm): Namelist filename not passed to parse method\n";  }  open( NAMELIST, "<$filename") || die "ERROR($nm): Can not open namelist: $filename\n";  print "Parse namelist: $name from file: $filename\n" if ($self->{'printlev'}>2);  #  # Find the designator for this namelist  #  my $found = undef;  my $line;  while ( defined($_ = <NAMELIST>) && (/./)  ) {    if ( /[\$\&]$name(.*?)$/i ) {      $line = $1;      $found = 1;      last;    }  }  if ( ! defined($found) ) {    print "WARNING($nm): did not find the correct namelist: $name in file: $filename\n" if ($self->{'printlev'}>2);    return;  }  my $expect = "variable";  goto LINE;  #  # Loop over each line in the namelist  #NEXT: while ( defined($line = <NAMELIST>) && (/./)  ) {    #    # Loop over each item in each line    #LINE: while ( defined($line) && ($line =~ /./) ) {      $self->parse_next( \$line, \$expect );      if ( $expect eq "end" ) {        last LINE;      }     }    if ( $expect eq "end" ) { last; }  }  close( NAMELIST );  $self->convert_case;}#============================================================================sub setkeypair {## Set the keyword pair#  my $self = shift;  if ( defined( $self->{'VAR'} ) ) {    my $ref = $self->{'NLREF'};    my $var = $self->{'VAR'};    my $val = $self->{'VALUE'};    if ( ! defined($val) ) {      die "ERROR:: Value not defined for variable: $var\n";    }    $$ref{$var} = $val;    $self->{'VAR'}   = undef;    $self->{'VALUE'} = undef;  }}#============================================================================sub parse_next {## Parse the next item in the line# parse_next( \$line, \$expect )#  my $self = shift;  my $line = shift;  my $expect = shift;  my $class = ref($self);  my $nm = "$class\:\:parse_next";  $_ = $$line;  # Blank line, return and continue  if ( /^\s*$/ ) {    $$line = undef;    return;  }  #  # Switch based on what type of item you expect  #  SWITCH: {    # Expect a variable    (($$expect eq "variable") || ($$expect eq "varorvalue")) && do {       # End-designator (F90 form "/" and non-standard F77 forms (&end) )       if ( /^\s*\// || /^\s*[\$\&]end/i ) {         $$line = undef;         $self->setkeypair;         $$expect = "end";         return;       }       # variable       if ( /^\s*,?\s*($namelist::varmatch)(.*?)$/ ) {         $$line = $2;         $$expect = "=";         $self->setkeypair;         $self->{'VAR'} = $1;       } elsif ( $$expect ne "varorvalue" ) {         die "ERROR($nm): expect a variable instead got: $_\n";       # value       } elsif ( $$expect eq "varorvalue"         &&   /^\s*([\s,]*)($namelist::nrvalmatch)([\s,]*)(.*?)$/ ) {         $$line = $4;         $$expect = "varorvalue";         $self->{'VALUE'} = $self->{'VALUE'} . ",$2";         # Comments, only can follow a value         if ( $$line =~ /^([\s,])*![^!]*$/ ) {           $$line = undef;         }       } else {         die "ERROR($nm): expect a value or variable instead got: $_\n";       }       last SWITCH;    };    # Expect a "="    ($$expect eq "=") && do {       if ( /^\s*=(.*?)$/ ) {         $$line = $1;         $$expect = "value";       } else {         die "ERROR($nm): expect a = instead got: $_\n";       }       last SWITCH;    };    # Expect a value    ($$expect eq "value") && do {       # value       if ( /^\s*(${namelist::valmatch})([\s,]*)(.*?)$/ ) {         $$line = $3;         $$expect = "varorvalue";         $self->{'VALUE'} = "$1";         # FORTRAN only allows comments after values         if ( $$line =~ /^\s*![^!]*$/ ) {           $$line = undef;         }       } else {         die "ERROR($nm): expect a value instead got: $_\n";       }       last SWITCH;    };    # default    die "ERROR($nm): Bad value to expect: $$expect\n";  }}#============================================================================# Quoting should be done in the Write method rather# than when string values are added to the namelist hash.# But the namelist variable type isn't known in the Write method.sub quote_string {    my $str = shift;    $str =~ s/^\s+//;    $str =~ s/\s+$//;    unless ($str =~ /^['"]/) {        #"'        $str = "\'$str\'";    }    return $str;}#============================================================================1   # to make use or require happy

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲日本在线a| 中文字幕 久热精品 视频在线 | 韩国三级电影一区二区| 欧美一卡二卡三卡四卡| 国产精品第一页第二页第三页| 亚洲午夜视频在线| 6080yy午夜一二三区久久| 捆绑调教美女网站视频一区| 欧美精品日日鲁夜夜添| 亚洲一二三级电影| 久久久久久久网| 色网站国产精品| 国产在线视频精品一区| 欧美色精品天天在线观看视频| 中文字幕色av一区二区三区| 91福利视频久久久久| 亚洲国产三级在线| 欧美一区二区三区喷汁尤物| 国产成人综合在线播放| 亚洲视频综合在线| 欧美男女性生活在线直播观看| 日韩国产欧美在线视频| 久久久久国产精品麻豆 | 国产精品青草久久| 久久蜜臀精品av| 久久99精品国产.久久久久久| 久久九九影视网| 9191精品国产综合久久久久久| 国产美女一区二区三区| 亚洲一区二区免费视频| 国产香蕉久久精品综合网| 91黄视频在线观看| 国产一区二区精品久久91| 亚洲一级二级三级在线免费观看| 精品久久久久久久久久久久久久久久久| av不卡在线观看| 成人午夜激情片| av福利精品导航| 亚洲bt欧美bt精品| 亚洲久草在线视频| 亚洲丝袜精品丝袜在线| 久久精品一区蜜桃臀影院| 欧美一级xxx| 精品成人私密视频| 日韩欧美高清在线| 26uuu色噜噜精品一区二区| 国产日韩成人精品| 国产精品系列在线播放| 亚洲午夜精品在线| 亚洲一区二区综合| 激情欧美一区二区三区在线观看| 欧美放荡的少妇| 在线成人高清不卡| 久久久久99精品国产片| 中文字幕av一区二区三区高| 亚洲黄色在线视频| 亚洲码国产岛国毛片在线| 亚洲综合激情小说| 久久国产免费看| 99久久精品免费看| 欧美日韩你懂得| 国产精品久久久久久久久久久免费看| 综合电影一区二区三区| 99视频一区二区三区| 色天天综合久久久久综合片| 成人午夜免费视频| jlzzjlzz亚洲女人18| 欧美蜜桃一区二区三区| 精品乱人伦小说| 国产精品电影一区二区| 依依成人综合视频| 五月天一区二区三区| 欧洲人成人精品| 亚洲综合另类小说| 97久久精品人人做人人爽| 国产日韩精品一区二区三区| 麻豆成人免费电影| 日韩欧美久久一区| 国产精品自拍三区| 中文字幕不卡三区| 日本欧美加勒比视频| 欧美偷拍一区二区| 久久综合九色综合97婷婷女人| 一区二区三区免费网站| 国产成人在线免费观看| 4438亚洲最大| 三级精品在线观看| 日韩欧美国产电影| 风流少妇一区二区| 最新日韩在线视频| 欧美在线视频日韩| 性做久久久久久免费观看 | 亚洲精品国产第一综合99久久| 色香蕉久久蜜桃| 国产在线不卡一区| 亚洲成av人片www| 国产亚洲一区字幕| 色老综合老女人久久久| 日韩va亚洲va欧美va久久| 26uuu另类欧美| 91黄视频在线观看| 91丨porny丨中文| 国产不卡视频一区二区三区| 亚洲激情五月婷婷| 91精品国产综合久久香蕉麻豆| 蜜臀久久99精品久久久久宅男| 欧美一级生活片| 5858s免费视频成人| 成人夜色视频网站在线观看| 亚洲国产综合色| 国产欧美一区二区精品性色超碰| 精品视频在线视频| 不卡视频免费播放| 99在线精品免费| 成人丝袜高跟foot| 蜜臀av一区二区三区| 蜜桃精品视频在线| 国产精品国产三级国产aⅴ原创| 91精品国产福利| 欧美一区二区高清| 久久一二三国产| 在线不卡免费欧美| 色噜噜狠狠色综合中国| 成人av电影在线观看| 高清beeg欧美| 日本视频一区二区| 午夜电影久久久| 日韩精品一二区| 久久国产成人午夜av影院| 国产一区二区三区日韩| av毛片久久久久**hd| 欧美日韩一区二区在线观看| 欧美一区二区三区喷汁尤物| 97久久超碰国产精品| 亚洲图片欧美综合| 国产精品私人自拍| 久久色在线观看| 久久久综合视频| 中文字幕在线不卡一区二区三区| 精品国产污网站| 亚洲欧美日韩在线播放| 天天综合色天天综合| 狠狠色狠狠色综合日日91app| 岛国一区二区三区| 欧美色成人综合| 一区视频在线播放| 国产真实乱偷精品视频免| 91亚洲精品久久久蜜桃网站| 97久久超碰国产精品| 精品国产乱码久久久久久牛牛| 国产精品毛片无遮挡高清| 日韩 欧美一区二区三区| 91久久精品日日躁夜夜躁欧美| 久久一区二区三区国产精品| 亚洲国产美国国产综合一区二区| 精品亚洲aⅴ乱码一区二区三区| 欧美影视一区在线| 日本不卡123| 欧美精品aⅴ在线视频| 一区二区三区四区精品在线视频| 久久电影网站中文字幕 | 日韩av电影天堂| 欧美在线免费视屏| 午夜久久久久久久久| 欧美丰满一区二区免费视频| 亚洲精品欧美综合四区| 丁香亚洲综合激情啪啪综合| 久久精品人人做人人爽97| 国产99久久久国产精品免费看| 国产欧美va欧美不卡在线| 国产在线精品一区二区不卡了| 日韩一区二区三区电影在线观看| 日本欧美肥老太交大片| 欧美人狂配大交3d怪物一区| 日韩高清不卡一区二区| 精品剧情在线观看| 国产一区二区三区美女| 久久久久综合网| 色哟哟精品一区| 老鸭窝一区二区久久精品| 久久久久久久久一| 国产99久久久国产精品| 亚洲国产精品二十页| 欧美亚洲一区二区在线| 久久狠狠亚洲综合| 国产精品欧美精品| 欧美一区二区在线免费观看| 成人av网站在线观看| 亚洲成人黄色小说| 欧美一区二区三区性视频| 国内久久婷婷综合| 亚洲一区二区在线观看视频| 国产精品久久久久久久久免费相片 | 麻豆91免费观看| 亚洲精品免费在线| 久久久久久亚洲综合| 久久久久久久久久美女| 91污在线观看| 亚洲电影中文字幕在线观看| 欧美精品久久久久久久多人混战 |