Changeset 951 for palm/trunk/SCRIPTS/NCL
- Timestamp:
- Jul 19, 2012 2:22:52 PM (12 years ago)
- Location:
- palm/trunk/SCRIPTS/NCL
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SCRIPTS/NCL/.ncl.config.default
r782 r951 828 828 829 829 830 var = " all"830 var = ",cross_profiles," 831 831 832 832 … … 1049 1049 ; data type: integer 1050 1050 ; 1051 ; default: 11051 ; default: -1 1052 1052 ;*************************************************** 1053 1053 if (.not. isvar("no_columns"))then 1054 1054 1055 1055 1056 no_columns = 11056 no_columns = -1 1057 1057 1058 1058 … … 1065 1065 ; data type: integer 1066 1066 ; 1067 ; default: 21067 ; default: -1 1068 1068 ;*************************************************** 1069 1069 if (.not. isvar("no_rows"))then 1070 1070 1071 1071 1072 no_rows = 21072 no_rows = -1 1073 1073 1074 1074 -
palm/trunk/SCRIPTS/NCL/profiles.ncl
r874 r951 293 293 print(" ") 294 294 end if 295 296 if (combine .NE. 0 .AND. combine .NE. 1)then 297 print(" ") 298 print("Your 'combine'= "+combine+" is invalid and set to 0") 299 print(" ") 300 combine = 0 295 296 ;************************************************************************ 297 ; check if cross_profiles is defined in file_1 298 ;************************************************************************ 299 300 if (isStrSubset(file_in(0), ".nc")) then 301 firstfile=addfile(file_1,"r") 302 else 303 firstfile=addfile(file_in(0) + "." + start_f + ".nc","r") 304 end if 305 306 cross_check=isatt(firstfile,"cross_profiles") 307 308 if (var .EQ. "all") then 309 VAR_LIST = firstfile@VAR_LIST 310 no_plots = str_fields_count(VAR_LIST, ";") 311 else 312 no_plots = str_fields_count(var, ",") 301 313 end if 302 if (no_files .GT. 1) then 303 combine = 0 304 print(" ") 305 print("If you have more than one input file you cannot combine "+\ 306 "variables: combine is set to 0") 307 print(" ") 308 end if 309 if (combine .EQ. 1 .AND. number_comb .EQ. -1) then 310 print(" ") 311 print("Set 'number_comb' to 2 or 3 or combine to 0") 312 print(" ") 313 exit 314 end if 315 if (combine .EQ. 1)then 316 if (number_comb .EQ. -1) then 317 print(" ") 318 print("Set 'number_comb' to 2 or 3 or combine to 0") 319 print(" ") 320 exit 321 end if 322 if (number_comb .NE. 2 .AND. number_comb .NE. 3) then 323 print(" ") 324 print("Set 'number_comb' to 2 or 3 or combine to 0") 325 print(" ") 326 exit 327 end if 328 end if 329 if (combine .EQ. 1 .AND. c_var .EQ. "c_variables") then 330 print(" ") 331 print("Select variables for overlaying ('c_var') or set combine to 0") 332 print(" ") 333 exit 314 315 if ((.not. cross_check) .AND. (var .EQ. ",cross_profiles,")) then 316 var="all" 334 317 end if 335 318 336 if (log_z .NE. 0 .AND. log_z .NE. 1)then 337 print(" ") 338 print("'log_z'= "+log_z+" is invalid and set to 0") 339 print(" ") 340 log_z = 0 341 end if 342 343 if (norm_z .EQ. 0) then 344 print(" ") 345 print("Normalising with 0 is not allowed, 'norm_z' is set to 1.0") 346 print(" ") 347 norm_z = 1.0 319 wks_gsn_log = True 320 321 ;************************************************************************ 322 ; check if cross_profiles can be used 323 ;************************************************************************ 324 325 if ((var .EQ. ",cross_profiles,") .AND. cross_check .AND. (over .EQ. 0) .AND. (no_files .LT. 2)) then 326 c_var_log = 1 327 else 328 c_var_log = 0 348 329 end if 349 330 350 ;*************************************************** 351 ; open input file 352 ;*************************************************** 353 354 do nof=0,no_files-1 355 356 files=new(end_f_t(nof)-start_f_t(nof)+1,string) 357 if (file_in_1(nof))then 358 if (isfilepresent(file_in(nof)))then 359 files(0)=file_in(nof) 331 if ((no_rows .EQ. -1) .AND. isatt(firstfile,"no_rows")) then 332 no_rows = firstfile@no_rows 333 else if ((no_rows .EQ. -1) .AND. .not. isatt(firstfile,"no_rows")) then 334 no_rows = 3 335 end if 336 end if 337 338 if ((no_columns .EQ. -1) .AND. isatt(firstfile,"no_columns")) then 339 no_columns = firstfile@no_columns 340 else if ((no_columns .EQ. -1) .AND. .not. isatt(firstfile,"no_columns")) then 341 no_columns = 2 342 end if 343 end if 344 345 if (c_var_log .EQ. 1) then 346 c_var_str = firstfile@cross_profiles 347 348 c_var_all = str_split(c_var_str,";") 349 350 c_var_all = ","+c_var_all+"," 351 352 ;************************************************************************ 353 ; check if an additional combined plot is demanded by the user 354 ;************************************************************************ 355 356 if ((c_var .EQ. "c_variables") .AND. (number_comb .EQ. -1) .AND. \ 357 (combine .EQ. 0)) then 358 max_com_i = max(dimsizes(c_var_all)) - 1 360 359 else 361 print(" ") 362 print("1st input file: '"+file_in(nof)+"' does not exist") 363 print(" ") 364 exit 365 end if 366 else 367 if (start_f_t(nof) .EQ. 0)then 368 if (isfilepresent(file_in(nof)+".nc"))then 369 files(0)=file_in(nof)+".nc" 370 do i=1,end_f_t(nof) 371 if (isfilepresent(file_in(nof)+"."+i+".nc"))then 372 files(i)=file_in(nof)+"."+i+".nc" 373 else 374 print(" ") 375 print("Input file: '"+file_in(nof)+"."+i+".nc' does not "+\ 376 "exist") 377 print(" ") 378 exit 379 end if 380 end do 381 else 382 print(" ") 383 print("Input file: '"+file_in(nof)+".nc' does not exist") 384 print(" ") 385 exit 386 end if 387 else 388 do i=start_f_t(nof),end_f_t(nof) 389 if (isfilepresent(file_in(nof)+"."+i+".nc"))then 390 files(i-start_f_t(nof))=file_in(nof)+"."+i+".nc" 391 else 392 print(" ") 393 print("Input file: '"+file_in(nof)+"."+i+".nc' does not exist") 394 print(" ") 395 exit 396 end if 397 end do 398 end if 399 end if 400 401 f=addfiles(files,"r") 402 f_att=addfile(files(0),"r") 403 ListSetType(f,"cat") 404 405 vNam = getfilevarnames(f_att) 406 vType = getfilevartypes(f_att,vNam) 407 408 if ((all(vType .eq. "double"))) then ;distinction if data is double or float 409 check_vType = True 410 else 411 check_vType = False 412 end if 413 414 if (nof .EQ. 0)then 415 vNam0=vNam 416 end if 417 if (nof .NE. 0)then 418 if (dim0 .NE. dim)then 419 print(" ") 420 print("There are 'no_files'="+no_files+" input files but they do "+\ 421 "not contain the same variables") 422 print(" ") 423 exit 424 else 425 do i=0,dim0-1 426 if (vNam0(i) .NE. vNam(i))then 427 print(" ") 428 print("There are 'no_files'="+no_files+" input files but "+\ 429 "they do not contain the same variables") 430 print(" ") 431 exit 360 max_com_i = max(dimsizes(c_var_all)) 361 c_var_all_temp = c_var_all 362 delete(c_var_all) 363 c_var_all = new(max_com_i+1,string) 364 c_var_all(0:max_com_i-1) = c_var_all_temp 365 delete(c_var_all_temp) 366 c_var_all(max_com_i) = c_var 367 end if 368 number_comb_all = str_fields_count(c_var_all,",") 369 370 ;************************************************************************ 371 ; currently, more than 3 plots cannot be drawn together 372 ;*********************************************************************** 373 374 do com_i = 0, max_com_i 375 if(number_comb_all(com_i) .GT. 3) then 376 c_var_all_temp = c_var_all 377 number_comb_all_temp = number_comb_all 378 delete(c_var_all) 379 delete(number_comb_all) 380 max_com_i = max_com_i + 1 381 c_var_all = new(max_com_i+1,string) 382 number_comb_all = new(max_com_i+1, integer) 383 if (com_i-1 .GT. 0) then 384 c_var_all(0:com_i-1) = c_var_all_temp(0:com_i-1) 385 number_comb_all(0:com_i-1) = number_comb_all_temp(0:com_i-1) 432 386 end if 433 end do 434 end if 435 end if 436 nof=nof+1 437 print(" ") 438 print("Variables in input file "+nof+":") 439 print("- "+ vNam) 440 print(" ") 441 nof=nof-1 442 dim = dimsizes(vNam) 443 dim0=dim 444 445 if (dim .EQ. 0) then 446 print(" ") 447 print("There is no data on file") 448 print(" ") 449 end if 450 451 prof3d = 0 452 do varn = dim-1,0,1 453 if ( isStrSubset( vNam(varn), "zu_3d") .OR. \ 454 isStrSubset( vNam(varn), "zw_3d")) then 455 prof3d = 1 456 break 457 end if 458 end do 459 460 if (var .NE. "all") then 461 ;rearrange the order of the variables in vNam so that the variables 462 ;specified by "var" are in the top of vNam 463 464 vNam_static = new((/dim/),string) 465 vNam_temp = new((/dim/),string) 466 467 var_char = stringtocharacter(var) 468 no_char = dimsizes(var_char) 469 comma = 0 470 471 do j=0,no_char-1 472 if(var_char(j) .eq. ",") 473 comma = comma + 1 474 end if 475 end do 476 477 if(comma .le. 1) 478 print(" ") 479 print("The variables 'var="+var+"'" ) 480 print("do not exist on your input file;") 481 print("be sure to have one comma before and after each variable") 482 print(" ") 483 exit 484 end if 485 486 if(comma .gt. dim) 487 print(" ") 488 print("The variables 'var="+var+"'" ) 489 print("do not exist on your input file;") 490 print("be sure to have one comma before and after each variable") 491 print(" ") 492 exit 493 end if 494 495 indices = new((/comma/),integer) 496 comma = 0 497 498 do j=0,no_char-1 499 if(var_char(j) .eq. ",") 500 indices(comma) = j 501 comma = comma + 1 502 end if 503 end do 504 505 do j=0,comma-2 506 vNam_temp(j) = charactertostring(\ 507 var_char(indices(j)+1:indices(j+1)-1)) 508 end do 509 510 do j=0,comma-2 511 count_check = 0 512 do varn=0,dim-1 513 if(vNam_temp(j) .ne. vNam(varn)) 514 count_check=count_check+1 515 end if 516 end do 517 518 if(count_check .eq. dim) 519 print(" ") 520 print("The variables 'var="+var+"'" ) 521 print("do not exist on your input file;") 522 print("be sure to have one comma before and after each variable") 523 print(" ") 524 exit 525 end if 526 527 vNam_static(j) = vNam_temp(comma - 2 - j) 528 end do 529 530 vNam_temp = vNam_static 531 vNam_static = "" 532 533 if (prof3d .EQ. 0) then 534 i = 0 535 do j=0,dim-1,2 536 vNam_static(j) = vNam_temp(i) 537 vNam_static(j+1) = "z" + vNam_static(j) 538 i = i+1 539 if(i .eq. comma-1) 540 break 541 end if 542 end do 543 544 delete(vNam_temp) 545 count_variable = 2*(comma-1) 546 else 547 i = 0 548 do j=0,dim-1,1 549 vNam_static(j) = vNam_temp(i) 550 i = i+1 551 if(i .eq. comma-1) 552 break 553 end if 554 end do 555 556 delete(vNam_temp) 557 count_variable = comma-1 558 end if 559 560 counter = 0 561 counter2 = 0 562 do j=0,dim-1 563 counter = 0 564 do i = 0, count_variable - 1 565 if(vNam_static(i) .ne. vNam(j)) 566 counter = counter + 1 567 end if 568 end do 569 570 if (counter .eq. count_variable) 571 vNam_static(count_variable + counter2) = vNam(j) 572 counter2 = counter2 + 1 573 end if 574 end do 575 576 vNam = vNam_static 577 delete(vNam_static) 578 end if 579 580 ;---------below steps only for first file -> nof=0 581 if (nof .EQ. 0) then 582 583 plot = new(dim,graphic) 584 plot_ = new(dim,graphic) 585 if (no_files .GT. 1) then 586 multi_plot = new((/no_files,dim/),graphic) 587 if (check_vType) then 588 max_nof = new((/no_files,dim/),double) 589 min_nof = new((/no_files,dim/),double) 590 else 591 max_nof = new((/no_files,dim/),float) 592 min_nof = new((/no_files,dim/),float) 593 end if 594 name = new((/no_files,dim/),string) 595 unit_ = new((/no_files,dim/),string) 596 end if 597 598 if (prof3d .EQ. 0) then 599 600 do varn=0,dim-1 601 if ( isStrSubset( vNam(varn), "time") .OR. \ 602 isStrSubset( vNam(varn), "NORM")) then 603 continue 604 end if 605 if (vNam(varn) .EQ. "u" .OR. isStrSubset(vNam(varn), "u_"))then 606 z_u = f_att->$vNam(varn+1)$ 607 break 608 else 609 if (vNam(varn) .EQ. "v" .OR. isStrSubset(vNam(varn), "v_"))then 610 z_u = f_att->$vNam(varn+1)$ 611 break 612 else 613 if(vNam(varn) .EQ. "pt" .OR. isStrSubset(vNam(varn), "pt_"))then 614 z_u = f_att->$vNam(varn+1)$ 615 break 616 else 617 if(vNam(varn) .EQ. "vpt" .OR. isStrSubset(vNam(varn), "vpt_"))then 618 z_u = f_att->$vNam(varn+1)$ 619 break 620 else 621 if(vNam(varn) .EQ. "lpt" .OR. isStrSubset(vNam(varn), "lpt_"))then 622 z_u = f_att->$vNam(varn+1)$ 623 break 624 else 625 if(vNam(varn) .EQ. "q" .OR. isStrSubset(vNam(varn), "q_") )then 626 z_u = f_att->$vNam(varn+1)$ 627 break 628 else 629 if(vNam(varn) .EQ. "qv" .OR. isStrSubset(vNam(varn), "qv_"))then 630 z_u = f_att->$vNam(varn+1)$ 631 break 632 else 633 if(vNam(varn) .EQ. "ql" .OR. isStrSubset(vNam(varn), "ql_"))then 634 z_u = f_att->$vNam(varn+1)$ 635 break 636 else 637 if(vNam(varn) .EQ. "rho" .OR. isStrSubset(vNam(varn), "rho_"))then 638 z_u = f_att->$vNam(varn+1)$ 639 break 640 else 641 if(vNam(varn) .EQ. "s" .OR. isStrSubset(vNam(varn), "s_") )then 642 z_u = f_att->$vNam(varn+1)$ 643 break 644 else 645 if(vNam(varn) .EQ. "sa" .OR. isStrSubset(vNam(varn), "sa_"))then 646 z_u = f_att->$vNam(varn+1)$ 647 break 648 else 649 if(vNam(varn) .EQ. "e" .OR. isStrSubset(vNam(varn), "e_"))then 650 651 z_u = f_att->$vNam(varn+1)$ 652 break 653 else 654 if(vNam(varn) .EQ. "es" .OR. \ 655 isStrSubset(vNam(varn), "es_") .OR. vNam(varn) .EQ. "e*" .OR. isStrSubset(vNam(varn), "e*_"))then 656 z_u = f_att->$vNam(varn+1)$ 657 break 658 else 659 if(vNam(varn) .EQ. "km" .OR. isStrSubset(vNam(varn), "km_"))then 660 z_u = f_att->$vNam(varn+1)$ 661 break 662 else 663 if(vNam(varn) .EQ. "kh" .OR. isStrSubset(vNam(varn), "kh_"))then 664 z_u = f_att->$vNam(varn+1)$ 665 break 666 else 667 if(vNam(varn) .EQ. "l" .OR. isStrSubset(vNam(varn), "l_"))then 668 z_u = f_att->$vNam(varn+1)$ 669 break 670 else 671 if(vNam(varn) .EQ. "us2" .OR. isStrSubset(vNam(varn), "us2_")\ 672 .OR. vNam(varn) .EQ. "u*2" .OR. isStrSubset(vNam(varn), "u*2_"))then 673 z_u = f_att->$vNam(varn+1)$ 674 break 675 else 676 if(vNam(varn) .EQ. "vs2" .OR. isStrSubset(vNam(varn), "vs2_")\ 677 .OR. vNam(varn) .EQ. "v*2" .OR. isStrSubset(vNam(varn), "v*2_"))then 678 z_u = f_att->$vNam(varn+1)$ 679 break 680 else 681 if(vNam(varn) .EQ. "pts2" .OR. isStrSubset(vNam(varn), "pts2_")\ 682 .OR. vNam(varn) .EQ. "pt*2" .OR. isStrSubset(vNam(varn), "pt*2_"))then 683 z_u = f_att->$vNam(varn+1)$ 684 break 685 else 686 if(vNam(varn) .EQ. "wsususodz" .OR. isStrSubset(vNam(varn), "wsususodz_")\ 687 .OR. vNam(varn) .EQ. "w*u*u*:dz" .OR. isStrSubset(vNam(varn), "w*u*u*:dz_"))then 688 z_u = f_att->$vNam(varn+1)$ 689 break 690 else 691 if(vNam(varn) .EQ. "wspsodz" .OR. isStrSubset(vNam(varn), "wspsodz_")\ 692 .OR. vNam(varn) .EQ. "w*p*:dz" .OR. isStrSubset(vNam(varn), "w*p*:dz_"))then 693 z_u = f_att->$vNam(varn+1)$ 694 break 695 else 696 if(vNam(varn) .EQ. "wpeodz" .OR. isStrSubset(vNam(varn), "wpeodz_")\ 697 .OR. vNam(varn) .EQ. "w"+dq+"e:dz" .OR. isStrSubset(vNam(varn), "w"+dq+"e:dz_"))then 698 z_u = f_att->$vNam(varn+1)$ 699 break 700 else 701 if(vNam(varn) .EQ. "qs2" .OR. isStrSubset(vNam(varn), "qs2_")\ 702 .OR. vNam(varn) .EQ. "q*2" .OR. isStrSubset(vNam(varn), "q*2_"))then 703 z_u = f_att->$vNam(varn+1)$ 704 break 705 end if 706 end if 707 end if 708 end if 709 end if 710 end if 711 end if 712 end if 713 end if 714 end if 715 end if 716 end if 717 end if 718 end if 719 end if 720 end if 721 end if 722 end if 723 end if 724 end if 725 end if 726 end if 727 end if 728 end do 729 730 do varn=0,dim-1 731 if ( isStrSubset( vNam(varn), "time") .OR. isStrSubset( vNam(varn), "NORM")) then 732 continue 733 end if 734 if (vNam(varn) .EQ. "w" .OR. isStrSubset(vNam(varn), "w_"))then 735 z_w = f_att->$vNam(varn+1)$ 736 break 737 else 738 if (vNam(varn) .EQ. "wpup" .OR. isStrSubset(vNam(varn), "wpup_")\ 739 .OR. vNam(varn) .EQ. "w"+dq+"u"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"u"+dq+"_"))then 740 z_w = f_att->$vNam(varn+1)$ 741 break 742 else 743 if(vNam(varn) .EQ. "wsus" .OR. isStrSubset(vNam(varn), "wsus_")\ 744 .OR. vNam(varn) .EQ. "w*u*" .OR. isStrSubset(vNam(varn), "w*u*_"))then 745 z_w = f_att->$vNam(varn+1)$ 746 break 747 else 748 if(vNam(varn) .EQ. "wu" .OR. isStrSubset(vNam(varn), "wu_"))then 749 z_w = f_att->$vNam(varn+1)$ 750 break 751 else 752 if(vNam(varn) .EQ. "wpvp" .OR. isStrSubset(vNam(varn), "wpvp_")\ 753 .OR. vNam(varn) .EQ. "w"+dq+"v"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"v"+dq+"_"))then 754 z_w = f_att->$vNam(varn+1)$ 755 break 756 else 757 if(vNam(varn) .EQ. "wsvs" .OR. isStrSubset(vNam(varn), "wsvs_")\ 758 .OR. vNam(varn) .EQ. "w*v*" .OR. isStrSubset(vNam(varn), "w*v*_"))then 759 z_w = f_att->$vNam(varn+1)$ 760 break 761 else 762 if(vNam(varn) .EQ. "wv" .OR. isStrSubset(vNam(varn), "wv_"))then 763 z_w = f_att->$vNam(varn+1)$ 764 break 765 else 766 if(vNam(varn) .EQ. "wptpp" .OR. isStrSubset(vNam(varn), "wptpp_")\ 767 .OR. vNam(varn) .EQ. "w"+dq+"pt"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"pt"+dq+"_"))then 768 z_w = f_att->$vNam(varn+1)$ 769 break 770 else 771 if(vNam(varn) .EQ. "wspts" .OR. isStrSubset(vNam(varn), "wspts_")\ 772 .OR. vNam(varn) .EQ. "w*pt*" .OR. isStrSubset(vNam(varn), "w*pt*_"))then 773 z_w = f_att->$vNam(varn+1)$ 774 break 775 else 776 if(vNam(varn) .EQ. "wpt" .OR. isStrSubset(vNam(varn), "wpt_"))then 777 z_w = f_att->$vNam(varn+1)$ 778 break 779 else 780 if(vNam(varn) .EQ. "wsptsBC" .OR. isStrSubset(vNam(varn), "wsptsBC_")\ 781 .OR. vNam(varn) .EQ. "w*pt*BC" .OR. isStrSubset(vNam(varn), "w*pt*BC_"))then 782 z_w = f_att->$vNam(varn+1)$ 783 break 784 else 785 if(vNam(varn) .EQ. "wptBC" .OR. isStrSubset(vNam(varn), "wptBC_"))then 786 z_w = f_att->$vNam(varn+1)$ 787 break 788 else 789 if(vNam(varn) .EQ. "wpvptp" .OR. isStrSubset(vNam(varn), "wpvptp_")\ 790 .OR. vNam(varn) .EQ. "w"+dq+"vpt"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"vpt"+dq+"_"))then 791 z_w = f_att->$vNam(varn+1)$ 792 break 793 else 794 if(vNam(varn) .EQ. "wsvpts" .OR. isStrSubset(vNam(varn), "wsvpts_")\ 795 .OR. vNam(varn) .EQ. "w*vpt*" .OR. isStrSubset(vNam(varn), "w*vpt*_"))then 796 z_w = f_att->$vNam(varn+1)$ 797 break 798 else 799 if(vNam(varn) .EQ. "wvpt" .OR. isStrSubset(vNam(varn), "wvpt_"))then 800 z_w = f_att->$vNam(varn+1)$ 801 break 802 else 803 if(vNam(varn) .EQ. "wpqp" .OR. isStrSubset(vNam(varn), "wpqp_")\ 804 .OR. vNam(varn) .EQ. "w"+dq+"q"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"q"+dq+"_"))then 805 z_w = f_att->$vNam(varn+1)$ 806 break 807 else 808 if(vNam(varn) .EQ. "wsqs" .OR. isStrSubset(vNam(varn), "wsqs_")\ 809 .OR. vNam(varn) .EQ. "w*q*" .OR. isStrSubset(vNam(varn), "w*q*_"))then 810 z_w = f_att->$vNam(varn+1)$ 811 break 812 else 813 if(vNam(varn) .EQ. "wq" .OR. isStrSubset(vNam(varn), "wq_"))then 814 z_w = f_att->$vNam(varn+1)$ 815 break 816 else 817 if(vNam(varn) .EQ. "wpqvp" .OR. isStrSubset(vNam(varn), "wpqvp_")\ 818 .OR. vNam(varn) .EQ. "w"+dq+"qv"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"qv"+dq+"_"))then 819 z_w = f_att->$vNam(varn+1)$ 820 break 821 else 822 if(vNam(varn) .EQ. "wsqvs" .OR. isStrSubset(vNam(varn), "wsqvs_")\ 823 .OR. vNam(varn) .EQ. "w*qv*" .OR. isStrSubset(vNam(varn), "w*qv*_"))then 824 z_w = f_att->$vNam(varn+1)$ 825 break 826 else 827 if(vNam(varn) .EQ. "wqv" .OR. isStrSubset(vNam(varn), "wqv_"))then 828 z_w = f_att->$vNam(varn+1)$ 829 break 830 else 831 if(vNam(varn) .EQ. "wpsp" .OR. isStrSubset(vNam(varn), "wpsp_")\ 832 .OR. vNam(varn) .EQ. "w"+dq+"s"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"s"+dq+"_"))then 833 z_w = f_att->$vNam(varn+1)$ 834 break 835 else 836 if(vNam(varn) .EQ. "wsss" .OR. isStrSubset(vNam(varn), "wsss_")\ 837 .OR. vNam(varn) .EQ. "w*s*" .OR. isStrSubset(vNam(varn), "w*s*_"))then 838 z_w = f_att->$vNam(varn+1)$ 839 break 840 else 841 if(vNam(varn) .EQ. "ws" .OR. isStrSubset(vNam(varn), "ws_"))then 842 z_w = f_att->$vNam(varn+1)$ 843 break 844 else 845 if(vNam(varn) .EQ. "wpsap" .OR. isStrSubset(vNam(varn), "wpsap_")\ 846 .OR. vNam(varn) .EQ. "w"+dq+"sa"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"sa"+dq+"_"))then 847 z_w = f_att->$vNam(varn+1)$ 848 break 849 else 850 if(vNam(varn) .EQ. "wssas" .OR. isStrSubset(vNam(varn), "wssas_")\ 851 .OR. vNam(varn) .EQ. "w*sa*" .OR. isStrSubset(vNam(varn), "w*sa*_"))then 852 z_w = f_att->$vNam(varn+1)$ 853 break 854 else 855 if(vNam(varn) .EQ. "wsa" .OR. isStrSubset(vNam(varn), "wsa_"))then 856 z_w = f_att->$vNam(varn+1)$ 857 break 858 else 859 if(vNam(varn) .EQ. "wses" .OR. isStrSubset(vNam(varn), "wses_")\ 860 .OR. vNam(varn) .EQ. "w*e*" .OR. isStrSubset(vNam(varn), "w*e*_"))then 861 z_w = f_att->$vNam(varn+1)$ 862 break 863 else 864 if(vNam(varn) .EQ. "ws2" .OR. isStrSubset(vNam(varn), "ws2_")\ 865 .OR. vNam(varn) .EQ. "w*2" .OR. isStrSubset(vNam(varn), "w*2_"))then 866 z_w = f_att->$vNam(varn+1)$ 867 break 868 else 869 if(vNam(varn) .EQ. "ws3" .OR. isStrSubset(vNam(varn), "ws3_")\ 870 .OR. vNam(varn) .EQ. "w*3" .OR. isStrSubset(vNam(varn), "w*3_"))then 871 z_w = f_att->$vNam(varn+1)$ 872 break 873 else 874 if(vNam(varn) .EQ. "Sw" .OR. isStrSubset(vNam(varn), "Sw_"))then 875 z_w = f_att->$vNam(varn+1)$ 876 break 877 else 878 if(vNam(varn) .EQ. "ws2pts".OR. isStrSubset(vNam(varn), "ws2pts_")\ 879 .OR. vNam(varn) .EQ. "w*2pt*" .OR. isStrSubset(vNam(varn), "w*2pt*_"))then 880 z_w = f_att->$vNam(varn+1)$ 881 break 882 else 883 if(vNam(varn) .EQ. "wspts2" .OR. isStrSubset(vNam(varn), "wspts2_")\ 884 .OR. vNam(varn) .EQ. "w*pt*2" .OR. isStrSubset(vNam(varn), "w*pt*2_"))then 885 z_w = f_att->$vNam(varn+1)$ 886 break 887 end if 888 end if 889 end if 890 end if 891 end if 892 end if 893 end if 894 end if 895 end if 896 end if 897 end if 898 end if 899 end if 900 end if 901 end if 902 end if 903 end if 904 end if 905 end if 906 end if 907 end if 908 end if 909 end if 910 end if 911 end if 912 end if 913 end if 914 end if 915 end if 916 end if 917 end if 918 end if 919 end if 920 end do 921 922 if (.not. isvar("z_u") .AND. .not. isvar ("z_w")) then 923 co=0 924 do varn=0,dim-1 925 if ( isStrSubset( vNam(varn), "time") .OR. \ 926 isStrSubset( vNam(varn), "NORM")) then 927 check = False 928 else 929 check = True 930 if (var .NE. "all") then 931 check = isStrSubset( var,","+vNam(varn)+"," ) 932 end if 933 end if 934 if (check)then 935 co=co+1 936 z = f_att->$vNam(varn+1)$ 937 if (getvardims(z) .EQ. "zu")then 938 z_u = z 939 else 940 if (getvardims(z) .EQ. "zw")then 941 z_w = z 942 end if 943 end if 944 dimz = dimsizes(z) 945 break 946 end if 947 end do 948 if (co .EQ. 0) then 949 print(" ") 950 print("The variables 'var="+var+"'" ) 951 print("do not exist on your input file;") 952 print("be sure to have one comma before and after each variable") 953 print(" ") 954 exit 955 end if 956 end if 957 958 if (isvar("z_u") ) then 959 dimz = dimsizes(z_u) 960 else 961 if (isvar("z_w"))then 962 dimz = dimsizes(z_w) 963 end if 964 end if 965 966 else 967 968 do varn = dim-1,0,1 969 if (vNam(varn) .EQ. "zu_3d")then 970 z_u = f_att->zu_3d 971 dimz = dimsizes(z_u) 972 else 973 if (vNam(varn) .EQ. "zw_3d")then 974 z_w = f_att->zw_3d 975 dimz = dimsizes(z_w) 976 end if 977 end if 978 if (vNam(varn) .EQ. "x")then 979 x = f_att->x 980 dimx=dimsizes(x) 981 else 982 if (vNam(varn) .EQ. "xu")then 983 x = f_att->xu 984 dimx=dimsizes(x) 985 end if 986 end if 987 if (vNam(varn) .EQ. "y")then 988 y = f_att->y 989 dimy=dimsizes(y) 990 else 991 if (vNam(varn) .EQ. "yv")then 992 y = f_att->yv 993 dimy=dimsizes(y) 994 end if 387 c_var_long = str_split(c_var_all_temp(com_i),",") 388 c_var_all(com_i) = "," + c_var_long(0) + "," + c_var_long(1) + "," + c_var_long(2) + "," 389 number_comb_all(com_i) = 3 390 c_var_all(com_i + 1) = "," 391 do com_j = 3, max(dimsizes(c_var_long)) - 1 392 c_var_all(com_i + 1) = c_var_all(com_i + 1) + c_var_long(com_j) + "," 393 end do 394 number_comb_all(com_i+1) = max(dimsizes(c_var_long)) - 3 395 c_var_all(com_i+2:max_com_i) = c_var_all_temp(com_i+1:max_com_i-1) 396 number_comb_all(com_i+2:max_com_i) = number_comb_all_temp(com_i+1:max_com_i-1) 397 delete(c_var_all_temp) 398 delete(number_comb_all_temp) 399 delete(c_var_long) 995 400 end if 996 401 end do 997 402 403 c_var_plot = new(max_com_i+1,graphic) 404 c_var_end_time_step = end_time_step 405 c_var_start_time_step = start_time_step 406 number_comb_1_log = 0 407 number_comb_23_log = 0 408 else 409 max_com_i = 0 998 410 end if 999 1000 if(.not. isvar("z_u") .AND. .not. isvar("z_w"))then 1001 print(" ") 1002 print("Program aborts - there are no z-variables available") 1003 print("Be sure if 'plot_3d' is set correctly") 1004 print(" ") 1005 exit 1006 end if 1007 1008 1009 t_all = f[:]->time 1010 nt = dimsizes(t_all) 1011 1012 if (nt .EQ. 1)then 1013 delta_t=t_all(nt-1)/nt 1014 else 1015 delta_t_array = new(nt-1,double) 1016 1017 do i=0,nt-2 1018 delta_t_array(i) = t_all(i+1)-t_all(i) 411 412 do com_i = 0,max_com_i 413 414 ;************************************************************************ 415 ; changes basic properties of the plots according to cross_profiles 416 ;************************************************************************ 417 418 if (c_var_log .EQ. 1) then 419 if (number_comb_all(com_i) .EQ. 1) then 420 number_combine= -1 421 combine = 0 422 c_var = "c_variables" 423 var = c_var_all(com_i) 424 delete(end_time_step) 425 delete(start_time_step) 426 end_time_step = c_var_end_time_step 427 start_time_step= c_var_start_time_step 428 if (number_comb_1_log .EQ. 1) then 429 delete(var_char) 430 end if 431 number_comb_1_log=1 432 else 433 var = "all" 434 number_comb = number_comb_all(com_i) 435 combine = 1 436 c_var = c_var_all(com_i) 437 delete(end_time_step) 438 delete(start_time_step) 439 end_time_step = c_var_end_time_step 440 start_time_step= c_var_start_time_step 441 if ((number_comb_1_log .EQ. 1) .OR. (number_comb_23_log .EQ. 1)) then 442 delete(label) 443 end if 444 if (number_comb_23_log .EQ. 1) then 445 delete(plot_o) 446 ; delete(label) 447 delete(color_o) 448 delete(mini) 449 delete(maxi) 450 delete(plot) 451 end if 452 number_comb_23_log=1 453 end if 454 end if 455 456 if (combine .NE. 0 .AND. combine .NE. 1)then 457 print(" ") 458 print("Your 'combine'= "+combine+" is invalid and set to 0") 459 print(" ") 460 combine = 0 461 end if 462 if (no_files .GT. 1) then 463 combine = 0 464 print(" ") 465 print("If you have more than one input file you cannot combine "+\ 466 "variables: combine is set to 0") 467 print(" ") 468 end if 469 if (combine .EQ. 1 .AND. number_comb .EQ. -1) then 470 print(" ") 471 print("Set 'number_comb' to 2 or 3 or combine to 0") 472 print(" ") 473 exit 474 end if 475 if (combine .EQ. 1)then 476 if (number_comb .EQ. -1) then 477 print(" ") 478 print("Set 'number_comb' to 2 or 3 or combine to 0") 479 print(" ") 480 exit 481 end if 482 if (number_comb .NE. 2 .AND. number_comb .NE. 3) then 483 print(" ") 484 print("Set 'number_comb' to 2 or 3 or combine to 0") 485 print(" ") 486 exit 487 end if 488 end if 489 if (combine .EQ. 1 .AND. c_var .EQ. "c_variables") then 490 print(" ") 491 print("Select variables for overlaying ('c_var') or set combine to 0") 492 print(" ") 493 exit 494 end if 495 496 if (log_z .NE. 0 .AND. log_z .NE. 1)then 497 print(" ") 498 print("'log_z'= "+log_z+" is invalid and set to 0") 499 print(" ") 500 log_z = 0 501 end if 502 503 if (norm_z .EQ. 0) then 504 print(" ") 505 print("Normalising with 0 is not allowed, 'norm_z' is set to 1.0") 506 print(" ") 507 norm_z = 1.0 508 end if 509 510 ;*************************************************** 511 ; open input file 512 ;*************************************************** 513 514 do nof=0,no_files-1 515 516 if (com_i .EQ. 0) 517 518 files=new(end_f_t(nof)-start_f_t(nof)+1,string) 519 if (file_in_1(nof))then 520 if (isfilepresent(file_in(nof)))then 521 files(0)=file_in(nof) 522 else 523 print(" ") 524 print("1st input file: '"+file_in(nof)+"' does not exist") 525 print(" ") 526 exit 527 end if 528 else 529 if (start_f_t(nof) .EQ. 0)then 530 if (isfilepresent(file_in(nof)+".nc"))then 531 files(0)=file_in(nof)+".nc" 532 do i=1,end_f_t(nof) 533 if (isfilepresent(file_in(nof)+"."+i+".nc"))then 534 files(i)=file_in(nof)+"."+i+".nc" 535 else 536 print(" ") 537 print("Input file: '"+file_in(nof)+"."+i+".nc' does not "+\ 538 "exist") 539 print(" ") 540 exit 541 end if 542 end do 543 else 544 print(" ") 545 print("Input file: '"+file_in(nof)+".nc' does not exist") 546 print(" ") 547 exit 548 end if 549 else 550 do i=start_f_t(nof),end_f_t(nof) 551 if (isfilepresent(file_in(nof)+"."+i+".nc"))then 552 files(i-start_f_t(nof))=file_in(nof)+"."+i+".nc" 553 else 554 print(" ") 555 print("Input file: '"+file_in(nof)+"."+i+".nc' does not exist") 556 print(" ") 557 exit 558 end if 559 end do 560 end if 561 end if 562 563 f=addfiles(files,"r") 564 f_att=addfile(files(0),"r") 565 ListSetType(f,"cat") 566 567 vNam = getfilevarnames(f_att) 568 vType = getfilevartypes(f_att,vNam) 569 570 if ((all(vType .eq. "double"))) then ;distinction if data is double or float 571 check_vType = True 572 else 573 check_vType = False 574 end if 575 576 if (nof .EQ. 0)then 577 vNam0=vNam 578 end if 579 if (nof .NE. 0)then 580 if (dim0 .NE. dim)then 581 print(" ") 582 print("There are 'no_files'="+no_files+" input files but they do "+\ 583 "not contain the same variables") 584 print(" ") 585 exit 586 else 587 do i=0,dim0-1 588 if (vNam0(i) .NE. vNam(i))then 589 print(" ") 590 print("There are 'no_files'="+no_files+" input files but "+\ 591 "they do not contain the same variables") 592 print(" ") 593 exit 594 end if 595 end do 596 end if 597 end if 598 nof=nof+1 599 if (com_i .EQ. 0) then 600 print(" ") 601 print("Variables in input file "+nof+":") 602 print("- "+ vNam) 603 print(" ") 604 end if 605 nof=nof-1 606 dim = dimsizes(vNam) 607 dim0=dim 608 609 if (dim .EQ. 0) then 610 print(" ") 611 print("There is no data on file") 612 print(" ") 613 end if 614 615 prof3d = 0 616 do varn = dim-1,0,1 617 if ( isStrSubset( vNam(varn), "zu_3d") .OR. \ 618 isStrSubset( vNam(varn), "zw_3d")) then 619 prof3d = 1 620 break 621 end if 1019 622 end do 1020 1021 delta_t = min(delta_t_array) 1022 delete(delta_t_array) 1023 end if 1024 1025 1026 ; **************************************************** 1027 ; start of time step and different types of mistakes that could be done 1028 ; **************************************************** 1029 1030 if (start_time_step .EQ. -1.) then 1031 start_time_step=t_all(0)/3600 1032 else 1033 if (start_time_step .GT. t_all(nt-1)/3600)then 1034 print(" ") 1035 print("'start_time_step' = "+ start_time_step +"h is greater "+\ 1036 "than last time step = " \ 1037 + t_all(nt-1)+"s = "+t_all(nt-1)/3600+"h") 1038 print(" ") 1039 print("Select another 'start_time_step'") 1040 print(" ") 1041 exit 1042 end if 1043 if (start_time_step .LT. t_all(0)/3600)then 1044 print(" ") 1045 print("'start_time_step' = "+ start_time_step +"h is lower "+\ 1046 "than first time step = " + t_all(0)+"s = "+t_all(0)/3600+"h") 1047 print(" ") 1048 exit 1049 end if 1050 end if 1051 1052 do i=0,nt-1 1053 if (start_time_step .GE. (t_all(i)-delta_t/2)/3600 .AND.\ 1054 start_time_step .LT. (t_all(i)+delta_t/2)/3600)then 1055 st=i 1056 break 623 624 end if 625 626 if (var .NE. "all") then 627 ;rearrange the order of the variables in vNam so that the variables 628 ;specified by "var" are in the top of vNam 629 630 vNam_static = new((/dim/),string) 631 vNam_temp = new((/dim/),string) 632 633 var_char = stringtocharacter(var) 634 no_char = dimsizes(var_char) 635 comma = 0 636 637 do j=0,no_char-1 638 if(var_char(j) .eq. ",") 639 comma = comma + 1 640 end if 641 end do 642 643 if(comma .le. 1) 644 print(" ") 645 print("The variables 'var="+var+"'" ) 646 print("do not exist on your input file;") 647 print("be sure to have one comma before and after each variable") 648 print(" ") 649 exit 650 end if 651 652 if(comma .gt. dim) 653 print(" ") 654 print("The variables 'var="+var+"'" ) 655 print("do not exist on your input file;") 656 print("be sure to have one comma before and after each variable") 657 print(" ") 658 exit 659 end if 660 661 indices = new((/comma/),integer) 662 comma = 0 663 664 do j=0,no_char-1 665 if(var_char(j) .eq. ",") 666 indices(comma) = j 667 comma = comma + 1 668 end if 669 end do 670 671 do j=0,comma-2 672 vNam_temp(j) = charactertostring(\ 673 var_char(indices(j)+1:indices(j+1)-1)) 674 end do 675 676 do j=0,comma-2 677 count_check = 0 678 do varn=0,dim-1 679 if(vNam_temp(j) .ne. vNam(varn)) 680 count_check=count_check+1 681 end if 682 end do 683 684 if(count_check .eq. dim) 685 print(" ") 686 print("The variables 'var="+var+"'" ) 687 print("do not exist on your input file;") 688 print("be sure to have one comma before and after each variable") 689 print(" ") 690 exit 691 end if 692 693 vNam_static(j) = vNam_temp(comma - 2 - j) 694 end do 695 696 vNam_temp = vNam_static 697 vNam_static = "" 698 699 if (prof3d .EQ. 0) then 700 i = 0 701 do j=0,dim-1,2 702 vNam_static(j) = vNam_temp(i) 703 vNam_static(j+1) = "z" + vNam_static(j) 704 i = i+1 705 if(i .eq. comma-1) 706 break 707 end if 708 end do 709 710 delete(vNam_temp) 711 count_variable = 2*(comma-1) 712 else 713 i = 0 714 do j=0,dim-1,1 715 vNam_static(j) = vNam_temp(i) 716 i = i+1 717 if(i .eq. comma-1) 718 break 719 end if 720 end do 721 722 delete(vNam_temp) 723 count_variable = comma-1 724 end if 725 726 counter = 0 727 counter2 = 0 728 729 do j=0,dim-1 730 counter = 0 731 do i = 0, count_variable - 1 732 if(vNam_static(i) .ne. vNam(j)) 733 counter = counter + 1 734 end if 735 end do 736 737 if (counter .eq. count_variable) 738 vNam_static(count_variable + counter2) = vNam(j) 739 counter2 = counter2 + 1 740 end if 741 end do 742 743 vNam = vNam_static 744 delete(vNam_static) 745 end if 746 747 ;---------below steps only for first file -> nof=0 748 if (nof .EQ. 0) then 749 750 plot = new(dim,graphic) 751 plot_ = new(dim,graphic) 752 if (no_files .GT. 1) then 753 multi_plot = new((/no_files,dim/),graphic) 754 if (check_vType) then 755 max_nof = new((/no_files,dim/),double) 756 min_nof = new((/no_files,dim/),double) 757 else 758 max_nof = new((/no_files,dim/),float) 759 min_nof = new((/no_files,dim/),float) 760 end if 761 name = new((/no_files,dim/),string) 762 unit_ = new((/no_files,dim/),string) 763 end if 764 765 if (prof3d .EQ. 0) then 766 767 do varn=0,dim-1 768 if ( isStrSubset( vNam(varn), "time") .OR. \ 769 isStrSubset( vNam(varn), "NORM")) then 770 continue 771 end if 772 if (vNam(varn) .EQ. "u" .OR. isStrSubset(vNam(varn), "u_"))then 773 z_u = f_att->$vNam(varn+1)$ 774 break 775 else 776 if (vNam(varn) .EQ. "v" .OR. isStrSubset(vNam(varn), "v_"))then 777 z_u = f_att->$vNam(varn+1)$ 778 break 779 else 780 if(vNam(varn) .EQ. "pt" .OR. isStrSubset(vNam(varn), "pt_"))then 781 z_u = f_att->$vNam(varn+1)$ 782 break 783 else 784 if(vNam(varn) .EQ. "vpt" .OR. isStrSubset(vNam(varn), "vpt_"))then 785 z_u = f_att->$vNam(varn+1)$ 786 break 787 else 788 if(vNam(varn) .EQ. "lpt" .OR. isStrSubset(vNam(varn), "lpt_"))then 789 z_u = f_att->$vNam(varn+1)$ 790 break 791 else 792 if(vNam(varn) .EQ. "q" .OR. isStrSubset(vNam(varn), "q_") )then 793 z_u = f_att->$vNam(varn+1)$ 794 break 795 else 796 if(vNam(varn) .EQ. "qv" .OR. isStrSubset(vNam(varn), "qv_"))then 797 z_u = f_att->$vNam(varn+1)$ 798 break 799 else 800 if(vNam(varn) .EQ. "ql" .OR. isStrSubset(vNam(varn), "ql_"))then 801 z_u = f_att->$vNam(varn+1)$ 802 break 803 else 804 if(vNam(varn) .EQ. "rho" .OR. isStrSubset(vNam(varn), "rho_"))then 805 z_u = f_att->$vNam(varn+1)$ 806 break 807 else 808 if(vNam(varn) .EQ. "s" .OR. isStrSubset(vNam(varn), "s_") )then 809 z_u = f_att->$vNam(varn+1)$ 810 break 811 else 812 if(vNam(varn) .EQ. "sa" .OR. isStrSubset(vNam(varn), "sa_"))then 813 z_u = f_att->$vNam(varn+1)$ 814 break 815 else 816 if(vNam(varn) .EQ. "e" .OR. isStrSubset(vNam(varn), "e_"))then 817 818 z_u = f_att->$vNam(varn+1)$ 819 break 820 else 821 if(vNam(varn) .EQ. "es" .OR. \ 822 isStrSubset(vNam(varn), "es_") .OR. vNam(varn) .EQ. "e*" .OR. isStrSubset(vNam(varn), "e*_"))then 823 z_u = f_att->$vNam(varn+1)$ 824 break 825 else 826 if(vNam(varn) .EQ. "km" .OR. isStrSubset(vNam(varn), "km_"))then 827 z_u = f_att->$vNam(varn+1)$ 828 break 829 else 830 if(vNam(varn) .EQ. "kh" .OR. isStrSubset(vNam(varn), "kh_"))then 831 z_u = f_att->$vNam(varn+1)$ 832 break 833 else 834 if(vNam(varn) .EQ. "l" .OR. isStrSubset(vNam(varn), "l_"))then 835 z_u = f_att->$vNam(varn+1)$ 836 break 837 else 838 if(vNam(varn) .EQ. "us2" .OR. isStrSubset(vNam(varn), "us2_")\ 839 .OR. vNam(varn) .EQ. "u*2" .OR. isStrSubset(vNam(varn), "u*2_"))then 840 z_u = f_att->$vNam(varn+1)$ 841 break 842 else 843 if(vNam(varn) .EQ. "vs2" .OR. isStrSubset(vNam(varn), "vs2_")\ 844 .OR. vNam(varn) .EQ. "v*2" .OR. isStrSubset(vNam(varn), "v*2_"))then 845 z_u = f_att->$vNam(varn+1)$ 846 break 847 else 848 if(vNam(varn) .EQ. "pts2" .OR. isStrSubset(vNam(varn), "pts2_")\ 849 .OR. vNam(varn) .EQ. "pt*2" .OR. isStrSubset(vNam(varn), "pt*2_"))then 850 z_u = f_att->$vNam(varn+1)$ 851 break 852 else 853 if(vNam(varn) .EQ. "wsususodz" .OR. isStrSubset(vNam(varn), "wsususodz_")\ 854 .OR. vNam(varn) .EQ. "w*u*u*:dz" .OR. isStrSubset(vNam(varn), "w*u*u*:dz_"))then 855 z_u = f_att->$vNam(varn+1)$ 856 break 857 else 858 if(vNam(varn) .EQ. "wspsodz" .OR. isStrSubset(vNam(varn), "wspsodz_")\ 859 .OR. vNam(varn) .EQ. "w*p*:dz" .OR. isStrSubset(vNam(varn), "w*p*:dz_"))then 860 z_u = f_att->$vNam(varn+1)$ 861 break 862 else 863 if(vNam(varn) .EQ. "wpeodz" .OR. isStrSubset(vNam(varn), "wpeodz_")\ 864 .OR. vNam(varn) .EQ. "w"+dq+"e:dz" .OR. isStrSubset(vNam(varn), "w"+dq+"e:dz_"))then 865 z_u = f_att->$vNam(varn+1)$ 866 break 867 else 868 if(vNam(varn) .EQ. "qs2" .OR. isStrSubset(vNam(varn), "qs2_")\ 869 .OR. vNam(varn) .EQ. "q*2" .OR. isStrSubset(vNam(varn), "q*2_"))then 870 z_u = f_att->$vNam(varn+1)$ 871 break 872 end if 873 end if 874 end if 875 end if 876 end if 877 end if 878 end if 879 end if 880 end if 881 end if 882 end if 883 end if 884 end if 885 end if 886 end if 887 end if 888 end if 889 end if 890 end if 891 end if 892 end if 893 end if 894 end if 895 end do 896 897 do varn=0,dim-1 898 if ( isStrSubset( vNam(varn), "time") .OR. isStrSubset( vNam(varn), "NORM")) then 899 continue 900 end if 901 if (vNam(varn) .EQ. "w" .OR. isStrSubset(vNam(varn), "w_"))then 902 z_w = f_att->$vNam(varn+1)$ 903 break 904 else 905 if (vNam(varn) .EQ. "wpup" .OR. isStrSubset(vNam(varn), "wpup_")\ 906 .OR. vNam(varn) .EQ. "w"+dq+"u"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"u"+dq+"_"))then 907 z_w = f_att->$vNam(varn+1)$ 908 break 909 else 910 if(vNam(varn) .EQ. "wsus" .OR. isStrSubset(vNam(varn), "wsus_")\ 911 .OR. vNam(varn) .EQ. "w*u*" .OR. isStrSubset(vNam(varn), "w*u*_"))then 912 z_w = f_att->$vNam(varn+1)$ 913 break 914 else 915 if(vNam(varn) .EQ. "wu" .OR. isStrSubset(vNam(varn), "wu_"))then 916 z_w = f_att->$vNam(varn+1)$ 917 break 918 else 919 if(vNam(varn) .EQ. "wpvp" .OR. isStrSubset(vNam(varn), "wpvp_")\ 920 .OR. vNam(varn) .EQ. "w"+dq+"v"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"v"+dq+"_"))then 921 z_w = f_att->$vNam(varn+1)$ 922 break 923 else 924 if(vNam(varn) .EQ. "wsvs" .OR. isStrSubset(vNam(varn), "wsvs_")\ 925 .OR. vNam(varn) .EQ. "w*v*" .OR. isStrSubset(vNam(varn), "w*v*_"))then 926 z_w = f_att->$vNam(varn+1)$ 927 break 928 else 929 if(vNam(varn) .EQ. "wv" .OR. isStrSubset(vNam(varn), "wv_"))then 930 z_w = f_att->$vNam(varn+1)$ 931 break 932 else 933 if(vNam(varn) .EQ. "wptpp" .OR. isStrSubset(vNam(varn), "wptpp_")\ 934 .OR. vNam(varn) .EQ. "w"+dq+"pt"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"pt"+dq+"_"))then 935 z_w = f_att->$vNam(varn+1)$ 936 break 937 else 938 if(vNam(varn) .EQ. "wspts" .OR. isStrSubset(vNam(varn), "wspts_")\ 939 .OR. vNam(varn) .EQ. "w*pt*" .OR. isStrSubset(vNam(varn), "w*pt*_"))then 940 z_w = f_att->$vNam(varn+1)$ 941 break 942 else 943 if(vNam(varn) .EQ. "wpt" .OR. isStrSubset(vNam(varn), "wpt_"))then 944 z_w = f_att->$vNam(varn+1)$ 945 break 946 else 947 if(vNam(varn) .EQ. "wsptsBC" .OR. isStrSubset(vNam(varn), "wsptsBC_")\ 948 .OR. vNam(varn) .EQ. "w*pt*BC" .OR. isStrSubset(vNam(varn), "w*pt*BC_"))then 949 z_w = f_att->$vNam(varn+1)$ 950 break 951 else 952 if(vNam(varn) .EQ. "wptBC" .OR. isStrSubset(vNam(varn), "wptBC_"))then 953 z_w = f_att->$vNam(varn+1)$ 954 break 955 else 956 if(vNam(varn) .EQ. "wpvptp" .OR. isStrSubset(vNam(varn), "wpvptp_")\ 957 .OR. vNam(varn) .EQ. "w"+dq+"vpt"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"vpt"+dq+"_"))then 958 z_w = f_att->$vNam(varn+1)$ 959 break 960 else 961 if(vNam(varn) .EQ. "wsvpts" .OR. isStrSubset(vNam(varn), "wsvpts_")\ 962 .OR. vNam(varn) .EQ. "w*vpt*" .OR. isStrSubset(vNam(varn), "w*vpt*_"))then 963 z_w = f_att->$vNam(varn+1)$ 964 break 965 else 966 if(vNam(varn) .EQ. "wvpt" .OR. isStrSubset(vNam(varn), "wvpt_"))then 967 z_w = f_att->$vNam(varn+1)$ 968 break 969 else 970 if(vNam(varn) .EQ. "wpqp" .OR. isStrSubset(vNam(varn), "wpqp_")\ 971 .OR. vNam(varn) .EQ. "w"+dq+"q"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"q"+dq+"_"))then 972 z_w = f_att->$vNam(varn+1)$ 973 break 974 else 975 if(vNam(varn) .EQ. "wsqs" .OR. isStrSubset(vNam(varn), "wsqs_")\ 976 .OR. vNam(varn) .EQ. "w*q*" .OR. isStrSubset(vNam(varn), "w*q*_"))then 977 z_w = f_att->$vNam(varn+1)$ 978 break 979 else 980 if(vNam(varn) .EQ. "wq" .OR. isStrSubset(vNam(varn), "wq_"))then 981 z_w = f_att->$vNam(varn+1)$ 982 break 983 else 984 if(vNam(varn) .EQ. "wpqvp" .OR. isStrSubset(vNam(varn), "wpqvp_")\ 985 .OR. vNam(varn) .EQ. "w"+dq+"qv"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"qv"+dq+"_"))then 986 z_w = f_att->$vNam(varn+1)$ 987 break 988 else 989 if(vNam(varn) .EQ. "wsqvs" .OR. isStrSubset(vNam(varn), "wsqvs_")\ 990 .OR. vNam(varn) .EQ. "w*qv*" .OR. isStrSubset(vNam(varn), "w*qv*_"))then 991 z_w = f_att->$vNam(varn+1)$ 992 break 993 else 994 if(vNam(varn) .EQ. "wqv" .OR. isStrSubset(vNam(varn), "wqv_"))then 995 z_w = f_att->$vNam(varn+1)$ 996 break 997 else 998 if(vNam(varn) .EQ. "wpsp" .OR. isStrSubset(vNam(varn), "wpsp_")\ 999 .OR. vNam(varn) .EQ. "w"+dq+"s"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"s"+dq+"_"))then 1000 z_w = f_att->$vNam(varn+1)$ 1001 break 1002 else 1003 if(vNam(varn) .EQ. "wsss" .OR. isStrSubset(vNam(varn), "wsss_")\ 1004 .OR. vNam(varn) .EQ. "w*s*" .OR. isStrSubset(vNam(varn), "w*s*_"))then 1005 z_w = f_att->$vNam(varn+1)$ 1006 break 1007 else 1008 if(vNam(varn) .EQ. "ws" .OR. isStrSubset(vNam(varn), "ws_"))then 1009 z_w = f_att->$vNam(varn+1)$ 1010 break 1011 else 1012 if(vNam(varn) .EQ. "wpsap" .OR. isStrSubset(vNam(varn), "wpsap_")\ 1013 .OR. vNam(varn) .EQ. "w"+dq+"sa"+dq .OR. isStrSubset(vNam(varn), "w"+dq+"sa"+dq+"_"))then 1014 z_w = f_att->$vNam(varn+1)$ 1015 break 1016 else 1017 if(vNam(varn) .EQ. "wssas" .OR. isStrSubset(vNam(varn), "wssas_")\ 1018 .OR. vNam(varn) .EQ. "w*sa*" .OR. isStrSubset(vNam(varn), "w*sa*_"))then 1019 z_w = f_att->$vNam(varn+1)$ 1020 break 1021 else 1022 if(vNam(varn) .EQ. "wsa" .OR. isStrSubset(vNam(varn), "wsa_"))then 1023 z_w = f_att->$vNam(varn+1)$ 1024 break 1025 else 1026 if(vNam(varn) .EQ. "wses" .OR. isStrSubset(vNam(varn), "wses_")\ 1027 .OR. vNam(varn) .EQ. "w*e*" .OR. isStrSubset(vNam(varn), "w*e*_"))then 1028 z_w = f_att->$vNam(varn+1)$ 1029 break 1030 else 1031 if(vNam(varn) .EQ. "ws2" .OR. isStrSubset(vNam(varn), "ws2_")\ 1032 .OR. vNam(varn) .EQ. "w*2" .OR. isStrSubset(vNam(varn), "w*2_"))then 1033 z_w = f_att->$vNam(varn+1)$ 1034 break 1035 else 1036 if(vNam(varn) .EQ. "ws3" .OR. isStrSubset(vNam(varn), "ws3_")\ 1037 .OR. vNam(varn) .EQ. "w*3" .OR. isStrSubset(vNam(varn), "w*3_"))then 1038 z_w = f_att->$vNam(varn+1)$ 1039 break 1040 else 1041 if(vNam(varn) .EQ. "Sw" .OR. isStrSubset(vNam(varn), "Sw_"))then 1042 z_w = f_att->$vNam(varn+1)$ 1043 break 1044 else 1045 if(vNam(varn) .EQ. "ws2pts".OR. isStrSubset(vNam(varn), "ws2pts_")\ 1046 .OR. vNam(varn) .EQ. "w*2pt*" .OR. isStrSubset(vNam(varn), "w*2pt*_"))then 1047 z_w = f_att->$vNam(varn+1)$ 1048 break 1049 else 1050 if(vNam(varn) .EQ. "wspts2" .OR. isStrSubset(vNam(varn), "wspts2_")\ 1051 .OR. vNam(varn) .EQ. "w*pt*2" .OR. isStrSubset(vNam(varn), "w*pt*2_"))then 1052 z_w = f_att->$vNam(varn+1)$ 1053 break 1054 end if 1055 end if 1056 end if 1057 end if 1058 end if 1059 end if 1060 end if 1061 end if 1062 end if 1063 end if 1064 end if 1065 end if 1066 end if 1067 end if 1068 end if 1069 end if 1070 end if 1071 end if 1072 end if 1073 end if 1074 end if 1075 end if 1076 end if 1077 end if 1078 end if 1079 end if 1080 end if 1081 end if 1082 end if 1083 end if 1084 end if 1085 end if 1086 end if 1087 end do 1088 1089 if (.not. isvar("z_u") .AND. .not. isvar ("z_w")) then 1090 co=0 1091 do varn=0,dim-1 1092 if ( isStrSubset( vNam(varn), "time") .OR. \ 1093 isStrSubset( vNam(varn), "NORM")) then 1094 check = False 1095 else 1096 check = True 1097 if (var .NE. "all") then 1098 check = isStrSubset( var,","+vNam(varn)+"," ) 1099 end if 1100 end if 1101 if (check)then 1102 co=co+1 1103 z = f_att->$vNam(varn+1)$ 1104 if (getvardims(z) .EQ. "zu")then 1105 z_u = z 1106 else 1107 if (getvardims(z) .EQ. "zw")then 1108 z_w = z 1109 end if 1110 end if 1111 dimz = dimsizes(z) 1112 break 1113 end if 1114 end do 1115 if (co .EQ. 0) then 1116 print(" ") 1117 print("The variables 'var="+var+"'" ) 1118 print("do not exist on your input file;") 1119 print("be sure to have one comma before and after each variable") 1120 print(" ") 1121 exit 1122 end if 1123 end if 1124 1125 if (isvar("z_u") ) then 1126 dimz = dimsizes(z_u) 1057 1127 else 1058 st=0 1059 end if 1060 end do 1061 1062 ; **************************************************** 1063 ; end of time step and different types of mistakes that could be done 1064 ; **************************************************** 1065 1066 if (end_time_step .EQ. -1.) then 1067 end_time_step = t_all(nt-1)/3600 1068 else 1069 if (end_time_step .GT. t_all(nt-1)/3600)then 1070 print(" ") 1071 print("'end_time_step' = "+ end_time_step +"h is greater "+\ 1072 "than last time step = " +\ 1073 t_all(nt-1)+"s = "+t_all(nt-1)/3600+"h") 1074 print(" ") 1075 print("Select another 'end_time_step'") 1076 print(" ") 1077 exit 1078 end if 1079 if (end_time_step .LT. start_time_step/3600)then 1080 print(" ") 1081 print("'end_time_step' = "+ end_time_step +"h is lower "+\ 1082 "than 'start_time_step' = "+start_time_step+"h") 1083 print(" ") 1084 print("Select another 'start_time_step' or 'end_time_step'") 1085 print(" ") 1086 exit 1087 end if 1088 end if 1089 1090 do i=0,nt-1 1091 if (end_time_step .GE. (t_all(i)-delta_t/2)/3600 .AND.\ 1092 end_time_step .LT. (t_all(i)+delta_t/2)/3600)then 1093 et=i 1094 break 1095 else 1096 et=0 1097 end if 1098 end do 1099 1100 delete(start_time_step) 1101 start_time_step=round(st,3) 1102 delete(end_time_step) 1103 end_time_step=round(et,3) 1104 1105 no_time = end_time_step-start_time_step+1 1106 1107 ; **************************************************** 1108 ; time_stride and different types of mistakes that could be done 1109 ; **************************************************** 1110 1111 if (time_stride .LT. 1) then 1112 print(" ") 1113 print("'time_stride' has to be positive and is set to 1") 1114 print(" ") 1115 time_stride = 1 1116 end if 1117 1118 if (time_stride .GT. no_time) then 1119 print(" ") 1120 print("'time_stride' is greater than number of available "+\ 1121 "time steps,") 1122 print("=> 'time_stride' is set to 1") 1123 time_stride = 1 1124 end if 1125 1126 ti_in = ispan(start_time_step,end_time_step,time_stride) ;ti_in contents 1127 ;the time indices 1128 ;to plot 1129 np = dimsizes(ti_in) 1130 1131 print(" ") 1132 print("Output of time steps from "+t_all(start_time_step)/3600+\ 1133 " h = "+t_all(start_time_step)+" s => index = "+start_time_step) 1134 print(" till "+t_all(ti_in(np-1))/3600+" h = "\ 1135 +t_all(ti_in(np-1))+" s => index = "+end_time_step) 1136 print(" with temporal stride = "+time_stride) 1137 print(" ") 1138 1139 1140 ; **************************************************** 1141 ; set up legend and colors 1142 ; **************************************************** 1143 1144 legend_label=new(np,string) 1145 do p=0, np-1 1146 legend_label(p)=sprintf("%6.2f", t_all(ti_in(p))/3600) 1147 end do 1148 1149 ; *************************************************** 1150 ; set up recourses 1151 ; *************************************************** 1152 1153 res = True 1154 res@gsnDraw = False 1155 res@gsnFrame = False 1156 res@txFont = "helvetica" 1157 res@tiMainFont = "helvetica" 1158 res@tiXAxisFont = "helvetica" 1159 res@tiYAxisFont = "helvetica" 1160 res@tmXBLabelFont = "helvetica" 1161 res@tmYLLabelFont = "helvetica" 1162 res@lgLabelFont = "helvetica" 1163 res@tmLabelAutoStride = True 1164 if (legend .EQ. 1)then 1165 res@pmLegendDisplayMode = "Always" 1166 end if 1167 1168 res@pmLegendSide = "Top" 1169 res@xyExplicitLegendLabels = legend_label 1170 res@pmLegendParallelPosF = 1.15 1171 res@pmLegendOrthogonalPosF = -1.0 1172 res@pmLegendWidthF = 0.12 1173 res@pmLegendHeightF = 0.05*np 1174 res@lgLabelFontHeightF = font_size_legend 1175 res@lgTitleString = "Time (h)" 1176 res@lgTitleFontHeightF = font_size 1177 res@txFontHeightF = font_size 1178 res@tiXAxisFontHeightF = font_size 1179 res@tiYAxisFontHeightF = font_size 1180 res@tmXBLabelFontHeightF = font_size 1181 res@tmYLLabelFontHeightF = font_size 1182 res@tiXAxisString = " " 1183 if ( black .eq. 0 ) then 1184 res@xyLineColors = -(ispan(-237,-2,235/np)) 1185 end if 1186 if (norm_z .EQ. 1)then 1187 res@tiYAxisString = "Height (m)" 1188 else 1189 res@tiYAxisString = "Height / "+norm_z+" (m)" 1190 end if 1128 if (isvar("z_w"))then 1129 dimz = dimsizes(z_w) 1130 end if 1131 end if 1132 1133 else 1134 1135 do varn = dim-1,0,1 1136 if (vNam(varn) .EQ. "zu_3d")then 1137 z_u = f_att->zu_3d 1138 dimz = dimsizes(z_u) 1139 else 1140 if (vNam(varn) .EQ. "zw_3d")then 1141 z_w = f_att->zw_3d 1142 dimz = dimsizes(z_w) 1143 end if 1144 end if 1145 if (vNam(varn) .EQ. "x")then 1146 x = f_att->x 1147 dimx=dimsizes(x) 1148 else 1149 if (vNam(varn) .EQ. "xu")then 1150 x = f_att->xu 1151 dimx=dimsizes(x) 1152 end if 1153 end if 1154 if (vNam(varn) .EQ. "y")then 1155 y = f_att->y 1156 dimy=dimsizes(y) 1157 else 1158 if (vNam(varn) .EQ. "yv")then 1159 y = f_att->yv 1160 dimy=dimsizes(y) 1161 end if 1162 end if 1163 end do 1164 1165 end if 1166 1167 if(.not. isvar("z_u") .AND. .not. isvar("z_w"))then 1168 print(" ") 1169 print("Program aborts - there are no z-variables available") 1170 print("Be sure if 'plot_3d' is set correctly") 1171 print(" ") 1172 exit 1173 end if 1174 1175 1176 t_all = f[:]->time 1177 nt = dimsizes(t_all) 1178 1179 1180 if (nt .EQ. 1)then 1181 delta_t=t_all(nt-1)/nt 1182 else 1183 delta_t=(t_all(nt-1)-t_all(0))/(nt-1) 1184 end if 1185 1186 ; **************************************************** 1187 ; start of time step and different types of mistakes that could be done 1188 ; **************************************************** 1189 1190 if (start_time_step .EQ. -1.) then 1191 delete(start_time_step) 1192 start_time_step=t_all(0)/3600 1193 else 1194 if (start_time_step .GT. t_all(nt-1)/3600)then 1195 print(" ") 1196 print("'start_time_step' = "+ start_time_step +"h is greater "+\ 1197 "than last time step = " \ 1198 + t_all(nt-1)+"s = "+t_all(nt-1)/3600+"h") 1199 print(" ") 1200 print("Select another 'start_time_step'") 1201 print(" ") 1202 exit 1203 end if 1204 if (start_time_step .LT. t_all(0)/3600)then 1205 print(" ") 1206 print("'start_time_step' = "+ start_time_step +"h is lower "+\ 1207 "than first time step = " + t_all(0)+"s = "+t_all(0)/3600+"h") 1208 print(" ") 1209 exit 1210 end if 1211 end if 1212 1213 do i=0,nt-1 1214 if (start_time_step .GE. (t_all(i)-delta_t/2)/3600 .AND.\ 1215 start_time_step .LT. (t_all(i)+delta_t/2)/3600)then 1216 st=i 1217 break 1218 else 1219 st=0 1220 end if 1221 end do 1222 1223 ; **************************************************** 1224 ; end of time step and different types of mistakes that could be done 1225 ; **************************************************** 1226 1227 if (end_time_step .EQ. -1.) then 1228 delete(end_time_step) 1229 end_time_step = t_all(nt-1)/3600 1230 else 1231 if (end_time_step .GT. t_all(nt-1)/3600)then 1232 print(" ") 1233 print("'end_time_step' = "+ end_time_step +"h is greater "+\ 1234 "than last time step = " +\ 1235 t_all(nt-1)+"s = "+t_all(nt-1)/3600+"h") 1236 print(" ") 1237 print("Select another 'end_time_step'") 1238 print(" ") 1239 exit 1240 end if 1241 if (end_time_step .LT. start_time_step/3600)then 1242 print(" ") 1243 print("'end_time_step' = "+ end_time_step +"h is lower "+\ 1244 "than 'start_time_step' = "+start_time_step+"h") 1245 print(" ") 1246 print("Select another 'start_time_step' or 'end_time_step'") 1247 print(" ") 1248 exit 1249 end if 1250 end if 1251 1252 do i=0,nt-1 1253 if (end_time_step .GE. (t_all(i)-delta_t/2)/3600 .AND.\ 1254 end_time_step .LT. (t_all(i)+delta_t/2)/3600)then 1255 et=i 1256 break 1257 else 1258 et=0 1259 end if 1260 end do 1261 1262 delete(start_time_step) 1263 start_time_step=round(st,3) 1264 delete(end_time_step) 1265 end_time_step=round(et,3) 1266 1267 no_time = end_time_step-start_time_step+1 1268 1269 ; **************************************************** 1270 ; time_stride and different types of mistakes that could be done 1271 ; **************************************************** 1191 1272 1192 if (log_z .EQ. 1) then 1193 res@trYLog = True 1194 end if 1195 1196 if (dash .EQ. 0 ) then 1197 res@xyMonoDashPattern = True 1198 else 1199 res@xyMonoDashPattern = False 1200 if (no_files .GT. 1) 1201 res@xyMonoDashPattern = True 1202 print(" ") 1203 print("If you use more than one file, patterns for different "+\ 1204 "timesteps cannot be used") 1205 print(" ") 1206 end if 1207 end if 1208 1209 res@tmXBMinorPerMajor = 4 1210 res@tmYLMinorPerMajor = 4 1211 1212 resP = True 1213 resP@txFont = "helvetica" 1214 resP@txString = f_att@title 1215 resP@txFuncCode = "~" 1216 resP@txFontHeightF = 0.015 1217 1218 ; *************************************************** 1219 ; set up graphics for plot 1220 ; *************************************************** 1221 1222 if (combine .EQ. 1) then 1223 plot_o = new(number_comb,graphic) 1224 label=new(number_comb,string) 1225 color_o=new(number_comb,integer) 1226 1227 if (check_vType) then 1228 mini=new(number_comb,double) 1229 maxi=new(number_comb,double) 1273 if (time_stride .LT. 1) then 1274 print(" ") 1275 print("'time_stride' has to be positive and is set to 1") 1276 print(" ") 1277 time_stride = 1 1278 end if 1279 1280 if (time_stride .GT. no_time) then 1281 print(" ") 1282 print("'time_stride' is greater than number of available "+\ 1283 "time steps,") 1284 print("=> 'time_stride' is set to 1") 1285 time_stride = 1 1286 end if 1287 1288 ti_in = ispan(start_time_step,end_time_step,time_stride) ;ti_in contents 1289 ;the time indices 1290 ;to plot 1291 np = dimsizes(ti_in) 1292 1293 if (com_i .EQ. max_com_i) then 1294 print(" ") 1295 print("Output of time steps from "+t_all(start_time_step)/3600+\ 1296 " h = "+t_all(start_time_step)+" s => index = "+start_time_step) 1297 print(" till "+t_all(ti_in(np-1))/3600+" h = "\ 1298 +t_all(ti_in(np-1))+" s => index = "+end_time_step) 1299 print(" with temporal stride = "+time_stride) 1300 print(" ") 1301 end if 1302 1303 ; **************************************************** 1304 ; set up legend and colors 1305 ; **************************************************** 1306 1307 legend_label=new(np,string) 1308 do p=0, np-1 1309 legend_label(p)=sprintf("%6.2f", t_all(ti_in(p))/3600) 1310 end do 1311 1312 ; *************************************************** 1313 ; set up recourses 1314 ; *************************************************** 1315 1316 res = True 1317 res@gsnDraw = False 1318 res@gsnFrame = False 1319 res@txFont = "helvetica" 1320 res@tiMainFont = "helvetica" 1321 res@tiXAxisFont = "helvetica" 1322 res@tiYAxisFont = "helvetica" 1323 res@tmXBLabelFont = "helvetica" 1324 res@tmYLLabelFont = "helvetica" 1325 res@lgLabelFont = "helvetica" 1326 res@tmLabelAutoStride = True 1327 1328 1329 if (legend .EQ. 1)then 1330 res@pmLegendDisplayMode = "Always" 1331 end if 1332 1333 res@pmLegendSide = "Right" 1334 res@xyExplicitLegendLabels = legend_label 1335 res@pmLegendWidthF = 0.12 1336 res@pmLegendHeightF = 0.05*np 1337 res@pmLegendParallelPosF = 1.0 1338 res@pmLegendOrthogonalPosF = -0.2625;-1.0 1339 res@lgLabelFontHeightF = font_size_legend 1340 res@lgTitleString = "Time (h)" 1341 res@lgTitleFontHeightF = font_size 1342 res@txFontHeightF = font_size 1343 res@tiXAxisFontHeightF = font_size 1344 res@tiYAxisFontHeightF = font_size 1345 res@tmXBLabelFontHeightF = font_size 1346 res@tmYLLabelFontHeightF = font_size 1347 res@tiXAxisString = " " 1348 res@lgJustification = "TopLeft" 1349 1350 if ( black .eq. 0 ) then 1351 res@xyLineColors = -(ispan(-237,-2,235/np)) 1352 end if 1353 if (norm_z .EQ. 1)then 1354 res@tiYAxisString = "Height (m)" 1355 else 1356 res@tiYAxisString = "Height / "+norm_z+" (m)" 1357 end if 1358 1359 if (log_z .EQ. 1) then 1360 res@trYLog = True 1361 end if 1362 1363 if (dash .EQ. 0 ) then 1364 res@xyMonoDashPattern = True 1230 1365 else 1231 mini=new(number_comb,float) 1232 maxi=new(number_comb,float) 1233 end if 1234 end if 1235 1236 if ( format_out .EQ. "pdf" .OR. format_out .EQ. "ps" ) then 1237 format_out@wkPaperSize = "A4" 1238 end if 1239 if ( format_out .EQ. "png" ) then 1240 format_out@wkWidth = 1000 1241 format_out@wkHeight = 1000 1242 end if 1243 1244 wks=gsn_open_wks(format_out,file_out) 1245 gsn_define_colormap(wks,"rainbow+white") 1246 1247 ; *************************************************** 1248 ; set up minimum and maximum height 1249 ; *************************************************** 1250 1251 if (log_z .EQ. 1)then 1252 if (min_z .EQ. -1)then 1253 if (isvar("z_u"))then 1254 min_z=z_u(1) 1255 else 1256 min_z=z_w(1) 1257 end if 1366 res@xyMonoDashPattern = False 1367 if (no_files .GT. 1) 1368 res@xyMonoDashPattern = True 1369 print(" ") 1370 print("If you use more than one file, patterns for different "+\ 1371 "timesteps cannot be used") 1372 print(" ") 1373 end if 1374 end if 1375 1376 res@tmXBMinorPerMajor = 4 1377 res@tmYLMinorPerMajor = 4 1378 1379 resP = True 1380 resP@txFont = "helvetica" 1381 resP@txString = f_att@title 1382 resP@txFuncCode = "~" 1383 resP@txFontHeightF = 0.015 1384 1385 ; *************************************************** 1386 ; set up graphics for plot 1387 ; *************************************************** 1388 1389 if (combine .EQ. 1) then 1390 plot_o = new(number_comb,graphic) 1391 label=new(number_comb,string) 1392 color_o=new(number_comb,integer) 1393 1394 if (check_vType) then 1395 mini=new(number_comb,double) 1396 maxi=new(number_comb,double) 1397 else 1398 mini=new(number_comb,float) 1399 maxi=new(number_comb,float) 1400 end if 1401 end if 1402 1403 if ( format_out .EQ. "pdf" .OR. format_out .EQ. "ps" ) then 1404 format_out@wkPaperSize = "A4" 1405 end if 1406 if ( format_out .EQ. "png" ) then 1407 format_out@wkWidth = 1000 1408 format_out@wkHeight = 1000 1409 end if 1410 1411 if (wks_gsn_log) then 1412 wks=gsn_open_wks(format_out,file_out) 1413 gsn_define_colormap(wks,"rainbow+white") 1414 wks_gsn_log = False 1415 end if 1416 1417 ; *************************************************** 1418 ; set up minimum and maximum height 1419 ; *************************************************** 1420 1421 if (log_z .EQ. 1)then 1422 if (min_z .EQ. -1)then 1423 if (isvar("z_u"))then 1424 min_z=z_u(1) 1425 else 1426 min_z=z_w(1) 1427 end if 1428 else 1429 if (isvar("z_w"))then 1430 if (min_z .GE. max(z_w) ) then 1431 print(" ") 1432 print("Minimum of height ('min_z'="+min_z+") is greater "+\ 1433 "than available heights (="+max(z_w)+")") 1434 print(" ") 1435 exit 1436 end if 1437 else 1438 if (min_z .GE. max(z_u) ) then 1439 print(" ") 1440 print("Minimum of height ('min_z'="+min_z+") is greater "+\ 1441 "than available heights (="+max(z_u)+")") 1442 print(" ") 1443 exit 1444 end if 1445 end if 1446 if (isvar("z_u"))then 1447 if (min_z .LT. z_u(1) ) then 1448 print(" ") 1449 print("Begin height 'min_z' at least at level k=1 (="+\ 1450 z_u(1)+"m) due to the logarithmic scale of the y-axis") 1451 print(" ") 1452 exit 1453 end if 1454 else 1455 if (min_z .LT. z_w(1) ) then 1456 print(" ") 1457 print("Begin height 'min_z' at least at level k=1 (="+\ 1458 z_w(1)+"m) due to the logarithmic scale of the y-axis") 1459 print(" ") 1460 exit 1461 end if 1462 end if 1463 end if 1258 1464 else 1259 if (isvar("z_w"))then 1260 if (min_z .GE. max(z_w) ) then 1261 print(" ") 1262 print("Minimum of height ('min_z'="+min_z+") is greater "+\ 1263 "than available heights (="+max(z_w)+")") 1264 print(" ") 1265 exit 1266 end if 1267 else 1465 if (isvar("z_u"))then 1466 if (min_z .EQ. -1)then 1467 min_z=z_u(0) 1468 end if 1469 else 1470 if (min_z .EQ. -1)then 1471 min_z=z_w(0) 1472 end if 1473 end if 1474 1475 if (isvar("z_w"))then 1476 if (min_z .GE. max(z_w) ) then 1477 print(" ") 1478 print("Minimum of height ('min_z'="+min_z+") is greater than "+\ 1479 "available heights (="+max(z_w)+")") 1480 print(" ") 1481 exit 1482 end if 1483 else 1484 if (min_z .EQ. -1)then 1485 min_z=z_u(0) 1486 end if 1268 1487 if (min_z .GE. max(z_u) ) then 1269 print(" ") 1270 print("Minimum of height ('min_z'="+min_z+") is greater "+\ 1271 "than available heights (="+max(z_u)+")") 1272 print(" ") 1273 exit 1274 end if 1275 end if 1276 if (isvar("z_u"))then 1277 if (min_z .LT. z_u(1) ) then 1278 print(" ") 1279 print("Begin height 'min_z' at least at level k=1 (="+\ 1280 z_u(1)+"m) due to the logarithmic scale of the y-axis") 1281 print(" ") 1282 exit 1283 end if 1284 else 1285 if (min_z .LT. z_w(1) ) then 1286 print(" ") 1287 print("Begin height 'min_z' at least at level k=1 (="+\ 1288 z_w(1)+"m) due to the logarithmic scale of the y-axis") 1289 print(" ") 1290 exit 1291 end if 1292 end if 1293 end if 1294 else 1295 if (isvar("z_u"))then 1296 if (min_z .EQ. -1)then 1297 min_z=z_u(0) 1298 end if 1488 print(" ") 1489 print("Minimum of height ('min_z'="+min_z+") is greater than "+\ 1490 "available heights (="+max(z_u)+")") 1491 print(" ") 1492 exit 1493 end if 1494 end if 1495 end if 1496 1497 if (isvar("z_w"))then 1498 if (max_z .EQ. -1)then 1499 max_z=max(z_w) 1500 end if 1299 1501 else 1300 if (min_z .EQ. -1)then1301 min_z=z_w(0)1302 1303 end if 1304 1502 if (max_z .EQ. -1)then 1503 max_z=max(z_u) 1504 end if 1505 end if 1506 1305 1507 if (isvar("z_w"))then 1306 if (min_z .GE. max(z_w) ) then 1307 print(" ") 1308 print("Minimum of height ('min_z'="+min_z+") is greater than "+\ 1309 "available heights (="+max(z_w)+")") 1310 print(" ") 1311 exit 1312 end if 1508 if (max_z .GT. max(z_w) ) then 1509 print(" ") 1510 print("Maximum of height ('max_z'="+max_z+") is greater than "+\ 1511 "available heights (="+max(z_w)+")") 1512 print(" ") 1513 exit 1514 end if 1515 end if 1516 1517 min_z=min_z/norm_z 1518 max_z=max_z/norm_z 1519 1520 ; *************************************************** 1521 ; read data and create plots 1522 ; *************************************************** 1523 1524 do ti =0,np-1 1525 if( t_all(ti_in(ti)) .lt. 10^36) then 1526 start_time_step = ti 1527 break 1528 end if 1529 end do 1530 1531 if (log_z .EQ. 1) then 1532 if (check_vType) then 1533 data = new((/dim,np,dimz-1/),double) 1534 data_0 = new((/np,dimz-1/),double) 1535 else 1536 data = new((/dim,np,dimz-1/),float) 1537 data_0 = new((/np,dimz-1/),float) 1538 end if 1539 data@_FillValue=9.96921e+36 1540 data_0 = 0.1 1541 t = new((/np,dimz-1/),float) 1542 t = 0.0 1543 unit = new(dim,string) 1544 if (isvar("z_u"))then 1545 if (typeof(z_u) .EQ. "double")then 1546 z_v = new((/dim,dimz/),double) 1547 z_ = new((/dim,dimz-1/),double) 1548 else 1549 if (typeof(z_u) .EQ. "float")then 1550 z_v = new((/dim,dimz/),float) 1551 z_ = new((/dim,dimz-1/),float) 1552 end if 1553 end if 1554 else 1555 if (isvar("z_w"))then 1556 if (typeof(z_w) .EQ. "double")then 1557 z_v = new((/dim,dimz/),double) 1558 z_ = new((/dim,dimz-1/),double) 1559 else 1560 if (typeof(z_w) .EQ. "float")then 1561 z_v = new((/dim,dimz/),float) 1562 z_ = new((/dim,dimz-1/),float) 1563 end if 1564 end if 1565 end if 1566 end if 1313 1567 else 1314 if (min_z .EQ. -1)then 1315 min_z=z_u(0) 1316 end if 1317 if (min_z .GE. max(z_u) ) then 1318 print(" ") 1319 print("Minimum of height ('min_z'="+min_z+") is greater than "+\ 1320 "available heights (="+max(z_u)+")") 1321 print(" ") 1322 exit 1323 end if 1324 end if 1325 end if 1326 1327 if (isvar("z_w"))then 1328 if (max_z .EQ. -1)then 1329 max_z=max(z_w) 1330 end if 1331 else 1332 if (max_z .EQ. -1)then 1333 max_z=max(z_u) 1334 end if 1335 end if 1336 1337 if (isvar("z_w"))then 1338 if (max_z .GT. max(z_w) ) then 1339 print(" ") 1340 print("Maximum of height ('max_z'="+max_z+") is greater than "+\ 1341 "available heights (="+max(z_w)+")") 1342 print(" ") 1343 exit 1344 end if 1345 end if 1346 1347 min_z=min_z/norm_z 1348 max_z=max_z/norm_z 1349 1350 ; *************************************************** 1351 ; read data and create plots 1352 ; *************************************************** 1353 1354 do ti =0,np-1 1355 if( t_all(ti_in(ti)) .lt. 10^36) then 1356 start_time_step = ti 1357 break 1358 end if 1359 end do 1360 1361 if (log_z .EQ. 1) then 1362 if (check_vType) then 1363 data = new((/dim,np,dimz-1/),double) 1364 data_0 = new((/np,dimz-1/),double) 1365 else 1366 data = new((/dim,np,dimz-1/),float) 1367 data_0 = new((/np,dimz-1/),float) 1368 end if 1369 data@_FillValue=9.96921e+36 1370 data_0 = 0.1 1371 t = new((/np,dimz-1/),float) 1372 t = 0.0 1373 unit = new(dim,string) 1374 if (isvar("z_u"))then 1375 if (typeof(z_u) .EQ. "double")then 1376 z_v = new((/dim,dimz/),double) 1377 z_ = new((/dim,dimz-1/),double) 1378 else 1379 if (typeof(z_u) .EQ. "float")then 1380 z_v = new((/dim,dimz/),float) 1381 z_ = new((/dim,dimz-1/),float) 1382 end if 1383 end if 1384 else 1385 if (isvar("z_w"))then 1386 if (typeof(z_w) .EQ. "double")then 1387 z_v = new((/dim,dimz/),double) 1388 z_ = new((/dim,dimz-1/),double) 1389 else 1390 if (typeof(z_w) .EQ. "float")then 1391 z_v = new((/dim,dimz/),float) 1392 z_ = new((/dim,dimz-1/),float) 1393 end if 1394 end if 1395 end if 1396 end if 1397 else 1398 if (check_vType) then 1399 data = new((/dim,np,dimz/),double) 1400 data_0 = new((/np,dimz/),double) 1401 else 1402 data = new((/dim,np,dimz/),float) 1403 data_0 = new((/np,dimz/),float) 1404 end if 1405 data@_FillValue=9.96921e+36 1406 data_0 = 0.0 1407 t = new((/np,dimz/),float) 1408 t = 0.0 1409 unit = new(dim,string) 1410 if (isvar("z_u"))then 1411 if (typeof(z_u) .EQ. "double")then 1412 z_v = new((/dim,dimz/),double) 1413 z_ = new((/dim,dimz/),double) 1414 else 1415 if (typeof(z_u) .EQ. "float")then 1416 z_v = new((/dim,dimz/),float) 1417 z_ = new((/dim,dimz/),float) 1418 end if 1419 end if 1420 else 1421 if (isvar("z_w"))then 1422 if (typeof(z_w) .EQ. "double")then 1423 z_v = new((/dim,dimz/),double) 1424 z_ = new((/dim,dimz/),double) 1425 else 1426 if (typeof(z_w) .EQ. "float")then 1427 z_v = new((/dim,dimz/),float) 1428 z_ = new((/dim,dimz/),float) 1429 end if 1430 end if 1431 end if 1432 end if 1433 end if 1434 1435 end if 1436 ;-------above steps only for first file 1437 1438 ; *************************************************** 1439 ; indicate plot number 1440 ; *************************************************** 1441 1442 if (combine .EQ. 1) then 1443 n = 1 1444 else 1445 n = 0 1446 end if 1447 1448 if (over .EQ. 1) then 1449 plot_u = gsn_csm_xy(wks,t,data_0(:,:),res) 1450 plot_v = gsn_csm_xy(wks,t,data_0(:,:),res) 1451 plot_w = gsn_csm_xy(wks,t,data_0(:,:),res) 1452 plot_pt = gsn_csm_xy(wks,t,data_0(:,:),res) 1453 plot_vpt = gsn_csm_xy(wks,t,data_0(:,:),res) 1454 plot_lpt = gsn_csm_xy(wks,t,data_0(:,:),res) 1455 plot_q = gsn_csm_xy(wks,t,data_0(:,:),res) 1456 plot_qv = gsn_csm_xy(wks,t,data_0(:,:),res) 1457 plot_ql = gsn_csm_xy(wks,t,data_0(:,:),res) 1458 plot_rho = gsn_csm_xy(wks,t,data_0(:,:),res) 1459 plot_s = gsn_csm_xy(wks,t,data_0(:,:),res) 1460 plot_sa = gsn_csm_xy(wks,t,data_0(:,:),res) 1461 plot_e = gsn_csm_xy(wks,t,data_0(:,:),res) 1462 plot_es = gsn_csm_xy(wks,t,data_0(:,:),res) 1463 plot_km = gsn_csm_xy(wks,t,data_0(:,:),res) 1464 plot_kh = gsn_csm_xy(wks,t,data_0(:,:),res) 1465 plot_l = gsn_csm_xy(wks,t,data_0(:,:),res) 1466 plot_wpup = gsn_csm_xy(wks,t,data_0(:,:),res) 1467 plot_wsus = gsn_csm_xy(wks,t,data_0(:,:),res) 1468 plot_wu = gsn_csm_xy(wks,t,data_0(:,:),res) 1469 plot_wpvp = gsn_csm_xy(wks,t,data_0(:,:),res) 1470 plot_wsvs = gsn_csm_xy(wks,t,data_0(:,:),res) 1471 plot_wv = gsn_csm_xy(wks,t,data_0(:,:),res) 1472 plot_wpptp = gsn_csm_xy(wks,t,data_0(:,:),res) 1473 plot_wspts = gsn_csm_xy(wks,t,data_0(:,:),res) 1474 plot_wpt = gsn_csm_xy(wks,t,data_0(:,:),res) 1475 plot_wsptsBC = gsn_csm_xy(wks,t,data_0(:,:),res) 1476 plot_wptBC = gsn_csm_xy(wks,t,data_0(:,:),res) 1477 plot_wpvptp = gsn_csm_xy(wks,t,data_0(:,:),res) 1478 plot_wsvpts = gsn_csm_xy(wks,t,data_0(:,:),res) 1479 plot_wvpt = gsn_csm_xy(wks,t,data_0(:,:),res) 1480 plot_wpqp = gsn_csm_xy(wks,t,data_0(:,:),res) 1481 plot_wsqs = gsn_csm_xy(wks,t,data_0(:,:),res) 1482 plot_wq = gsn_csm_xy(wks,t,data_0(:,:),res) 1483 plot_wpqvp = gsn_csm_xy(wks,t,data_0(:,:),res) 1484 plot_wsqvs = gsn_csm_xy(wks,t,data_0(:,:),res) 1485 plot_wqv = gsn_csm_xy(wks,t,data_0(:,:),res) 1486 plot_wpsp = gsn_csm_xy(wks,t,data_0(:,:),res) 1487 plot_wsss = gsn_csm_xy(wks,t,data_0(:,:),res) 1488 plot_ws = gsn_csm_xy(wks,t,data_0(:,:),res) 1489 plot_wpsap = gsn_csm_xy(wks,t,data_0(:,:),res) 1490 plot_wssas = gsn_csm_xy(wks,t,data_0(:,:),res) 1491 plot_wsa = gsn_csm_xy(wks,t,data_0(:,:),res) 1492 plot_wses = gsn_csm_xy(wks,t,data_0(:,:),res) 1493 plot_us2 = gsn_csm_xy(wks,t,data_0(:,:),res) 1494 plot_vs2 = gsn_csm_xy(wks,t,data_0(:,:),res) 1495 plot_ws2 = gsn_csm_xy(wks,t,data_0(:,:),res) 1496 plot_pts2 = gsn_csm_xy(wks,t,data_0(:,:),res) 1497 plot_ws3 = gsn_csm_xy(wks,t,data_0(:,:),res) 1498 plot_Sw = gsn_csm_xy(wks,t,data_0(:,:),res) 1499 plot_ws2pts = gsn_csm_xy(wks,t,data_0(:,:),res) 1500 plot_wspts2 = gsn_csm_xy(wks,t,data_0(:,:),res) 1501 plot_wsususodz = gsn_csm_xy(wks,t,data_0(:,:),res) 1502 plot_wspsodz = gsn_csm_xy(wks,t,data_0(:,:),res) 1503 plot_wpeodz = gsn_csm_xy(wks,t,data_0(:,:),res) 1504 1505 if (check_vType) then 1506 miniu = 100000.d 1507 maxiu = -100000.d 1508 miniv = 100000.d 1509 maxiv = -100000.d 1510 miniw = 100000.d 1511 maxiw = -100000.d 1512 minipt = 100000.d 1513 maxipt = -100000.d 1514 minivpt = 100000.d 1515 maxivpt = -100000.d 1516 minilpt = 100000.d 1517 maxilpt = -100000.d 1518 miniq = 100000.d 1519 maxiq = -100000.d 1520 miniqv = 100000.d 1521 maxiqv = -100000.d 1522 miniql = 100000.d 1523 maxiql = -100000.d 1524 minie = 100000.d 1525 maxie = -100000.d 1526 minies = 100000.d 1527 maxies = -100000.d 1528 minikm = 100000.d 1529 maxikm = -100000.d 1530 minikh = 100000.d 1531 maxikh = -100000.d 1532 miniwpup = 100000.d 1533 maxiwpup = -100000.d 1534 miniwsus = 100000.d 1535 maxiwsus = -100000.d 1536 miniwu = 100000.d 1537 maxiwu = -100000.d 1538 miniwpvp = 100000.d 1539 maxiwpvp = -100000.d 1540 miniwsvs = 100000.d 1541 maxiwsvs = -100000.d 1542 miniwv = 100000.d 1543 maxiwv = -100000.d 1544 miniwpptp = 100000.d 1545 maxiwpptp = -100000.d 1546 miniwspts = 100000.d 1547 maxiwspts = -100000.d 1548 miniwpt = 100000.d 1549 maxiwpt = -100000.d 1550 miniwsptsBC = 100000.d 1551 maxiwsptsBC = -100000.d 1552 miniwptBC = 100000.d 1553 maxiwptBC = -100000.d 1554 miniwpvptp = 100000.d 1555 maxiwpvptp = -100000.d 1556 miniwsvpts = 100000.d 1557 maxiwsvpts = -100000.d 1558 miniwvpt = 100000.d 1559 maxiwvpt = -100000.d 1560 miniwpqp = 100000.d 1561 maxiwpqp = -100000.d 1562 miniwsqs = 100000.d 1563 maxiwsqs = -100000.d 1564 miniwq = 100000.d 1565 maxiwq = -100000.d 1566 miniwpqvp = 100000.d 1567 maxiwpqvp = -100000.d 1568 miniwsqvs = 100000.d 1569 maxiwsqvs = -100000.d 1570 miniwqv = 100000.d 1571 maxiwqv = -100000.d 1572 miniwpsp = 100000.d 1573 maxiwpsp = -100000.d 1574 miniwsss = 100000.d 1575 maxiwsss = -100000.d 1576 miniws = 100000.d 1577 maxiws = -100000.d 1578 miniwpsap = 100000.d 1579 maxiwpsap = -100000.d 1580 miniwssas = 100000.d 1581 maxiwssas = -100000.d 1582 miniwsa = 100000.d 1583 maxiwsa = -100000.d 1584 minius2 = 100000.d 1585 maxius2 = -100000.d 1586 minivs2 = 100000.d 1587 maxivs2 = -100000.d 1588 miniws2 = 100000.d 1589 maxiws2 = -100000.d 1590 miniwsususodz = 100000.d 1591 maxiwsususodz = -100000.d 1592 miniwspsodz = 100000.d 1593 maxiwspsodz = -100000.d 1594 miniwpeodz = 100000.d 1595 maxiwpeodz = -100000.d 1596 else 1597 miniu = 100000. 1598 maxiu = -100000. 1599 miniv = 100000. 1600 maxiv = -100000. 1601 miniw = 100000. 1602 maxiw = -100000. 1603 minipt = 100000. 1604 maxipt = -100000. 1605 minivpt = 100000. 1606 maxivpt = -100000. 1607 minilpt = 100000. 1608 maxilpt = -100000. 1609 miniq = 100000. 1610 maxiq = -100000. 1611 miniqv = 100000. 1612 maxiqv = -100000. 1613 miniql = 100000. 1614 maxiql = -100000. 1615 minie = 100000. 1616 maxie = -100000. 1617 minies = 100000. 1618 maxies = -100000. 1619 minikm = 100000. 1620 maxikm = -100000. 1621 minikh = 100000. 1622 maxikh = -100000. 1623 miniwpup = 100000. 1624 maxiwpup = -100000. 1625 miniwsus = 100000. 1626 maxiwsus = -100000. 1627 miniwu = 100000. 1628 maxiwu = -100000. 1629 miniwpvp = 100000. 1630 maxiwpvp = -100000. 1631 miniwsvs = 100000. 1632 maxiwsvs = -100000. 1633 miniwv = 100000. 1634 maxiwv = -100000. 1635 miniwpptp = 100000. 1636 maxiwpptp = -100000. 1637 miniwspts = 100000. 1638 maxiwspts = -100000. 1639 miniwpt = 100000. 1640 maxiwpt = -100000. 1641 miniwsptsBC = 100000. 1642 maxiwsptsBC = -100000. 1643 miniwptBC = 100000. 1644 maxiwptBC = -100000. 1645 miniwpvptp = 100000. 1646 maxiwpvptp = -100000. 1647 miniwsvpts = 100000. 1648 maxiwsvpts = -100000. 1649 miniwvpt = 100000. 1650 maxiwvpt = -100000. 1651 miniwpqp = 100000. 1652 maxiwpqp = -100000. 1653 miniwsqs = 100000. 1654 maxiwsqs = -100000. 1655 miniwq = 100000. 1656 maxiwq = -100000. 1657 miniwpqvp = 100000. 1658 maxiwpqvp = -100000. 1659 miniwsqvs = 100000. 1660 maxiwsqvs = -100000. 1661 miniwqv = 100000. 1662 maxiwqv = -100000. 1663 miniwpsp = 100000. 1664 maxiwpsp = -100000. 1665 miniwsss = 100000. 1666 maxiwsss = -100000. 1667 miniws = 100000. 1668 maxiws = -100000. 1669 miniwpsap = 100000. 1670 maxiwpsap = -100000. 1671 miniwssas = 100000. 1672 maxiwssas = -100000. 1673 miniwsa = 100000. 1674 maxiwsa = -100000. 1675 minius2 = 100000. 1676 maxius2 = -100000. 1677 minivs2 = 100000. 1678 maxivs2 = -100000. 1679 miniws2 = 100000. 1680 maxiws2 = -100000. 1681 miniwsususodz = 100000. 1682 maxiwsususodz = -100000. 1683 miniwspsodz = 100000. 1684 maxiwspsodz = -100000. 1685 miniwpeodz = 100000. 1686 maxiwpeodz = -100000. 1687 end if 1688 1689 end if 1690 1691 if (prof3d .EQ. 1)then 1692 1693 if (end_x .EQ. -1) then 1694 end_x=dimx-2 1695 end if 1696 if (end_y .EQ. -1)then 1697 end_y=dimy-2 1698 end if 1699 if (start_x .LT. 0)then 1700 print(" ") 1701 print("'start_x' is lower than 0 and set to 0") 1702 print(" ") 1703 start_x=0 1704 end if 1705 if (start_x .GT. dimx-1)then 1706 print(" ") 1707 print("'start_x' is greater than available x-range and set to "+\ 1708 "maximum of x-range (excluding ghostpoint)") 1709 print(" ") 1710 start_x=dimx-2 1711 end if 1712 if (end_x .EQ. dimx-1)then 1713 print(" ") 1714 print("'end_x' = "+end_x+" and includes the ghostpoint") 1715 print(" ") 1716 end if 1717 if (end_x .GT. dimx-1)then 1718 print(" ") 1719 print("'end_x' = "+end_x+" is greater than available x-range and set "+\ 1720 "to maximum of x-range (excluding ghostpoint)") 1721 print(" ") 1722 end_x=dimx-2 1723 end if 1724 if (end_x .LT. start_x)then 1725 print(" ") 1726 print("'end_x' = "+end_x+" is lower than 'start_x' = "+start_x+\ 1727 " and set to maximum of x-range (excluding ghostpoint)") 1728 print(" ") 1729 end_x=dimx-2 1730 end if 1731 if (start_y .LT. 0)then 1732 print(" ") 1733 print("'start_y' is lower than 0 and set to 0") 1734 print(" ") 1735 start_y=0 1736 end if 1737 if (start_y .GT. dimy-1)then 1738 print(" ") 1739 print("'start_y' is greater than available y-range and set to "+\ 1740 "maximum of y-range (excluding ghostpoint)") 1741 print(" ") 1742 start_x=dimy-2 1743 end if 1744 if (end_y .EQ. dimy-1)then 1745 print(" ") 1746 print("'end_y' = "+end_y+" and includes the ghostpoint") 1747 print(" ") 1748 end if 1749 if (end_y .GT. dimy-1)then 1750 print(" ") 1751 print("'end_y' = "+end_y+" is greater than available y-range and "+\ 1752 "set to maximum of y-range (excluding ghostpoint)") 1753 print(" ") 1754 end_x=dimy-2 1755 end if 1756 if (end_y .LT. start_y)then 1757 print(" ") 1758 print("'end_y' = "+end_y+" is lower than 'start_y' = "+start_y+\ 1759 " and set to maximum of y-range (excluding ghostpoint)") 1760 print(" ") 1761 end_y=dimy-2 1762 end if 1763 1764 end if 1765 1766 n_o=0 1767 count_var=0 1768 1769 res@xyDashPattern = 1*nof 1770 1771 over_remind = False 1772 if ( over .eq. 1)then 1773 over_remind = True 1774 end if 1775 1776 do varn = 0,dim-1 1777 1778 check = True 1779 1780 if (prof3d .EQ. 0) then 1781 if ( isStrSubset( vNam(varn), "time") .OR. \ 1782 isStrSubset( vNam(varn), "NORM")) then 1783 check = False 1784 end if 1785 else 1786 if ( isStrSubset( vNam(varn), "time") .OR. \ 1787 isStrSubset( vNam(varn), "zusi") .OR. \ 1788 isStrSubset( vNam(varn), "zwwi") .OR. \ 1789 isStrSubset( vNam(varn), "x") .OR. \ 1790 isStrSubset( vNam(varn), "xu") .OR. \ 1791 isStrSubset( vNam(varn), "y") .OR. \ 1792 isStrSubset( vNam(varn), "yv") .OR. \ 1793 isStrSubset( vNam(varn), "zu_3d") .OR. \ 1794 isStrSubset( vNam(varn), "zw_3d")) then 1795 check = False 1796 end if 1797 end if 1798 1799 if (var .NE. "all") then 1800 check = isStrSubset( var,","+vNam(varn)+"," ) 1801 end if 1802 1803 if (combine .EQ. 1) then 1804 com=isStrSubset(c_var,","+vNam(varn)+"," ) 1805 if (com) then 1806 if (prof3d .EQ. 0) then 1807 temp = f[:]->$vNam(varn)$ 1808 temp_att = f_att->$vNam(varn)$ 1809 if (log_z .EQ. 1) then 1810 do j=0,np-1 1811 data(varn,j,:) = temp(ti_in(j),1:dimz-1) 1812 end do 1813 else 1814 do j=0,np-1 1815 data(varn,j,:) = temp(ti_in(j),0:dimz-1) 1816 end do 1817 end if 1818 else 1819 if (log_z .EQ. 1) then 1820 do i=1,dimz-1 1821 do j=0,np-1 1822 temp = f[:]->$vNam(varn)$ 1823 temp_att = f_att->$vNam(varn)$ 1824 data_temp = temp(ti_in(j),i,\ 1825 start_y:end_y,start_x:end_x) 1826 data(varn,j,i-1) = dim_avg_Wrap(\ 1827 dim_avg_Wrap(data_temp)) 1828 end do 1829 end do 1830 else 1831 do i=0,dimz-1 1832 do j=0,np-1 1833 temp = f[:]->$vNam(varn)$ 1834 temp_att = f_att->$vNam(varn)$ 1835 data_temp = temp(ti_in(j),i,\ 1836 start_y:end_y,start_x:end_x) 1837 data(varn,j,i) = dim_avg_Wrap(dim_avg_Wrap(data_temp)) 1838 end do 1839 end do 1840 end if 1841 print(" ") 1842 print("Variable for combine '"+vNam(varn)+"' is read") 1843 print(" ") 1844 end if 1845 unit(varn) = temp_att@units 1846 if (n_o .GT. number_comb-1) then 1847 print(" ") 1848 print("Set 'number_comb' to the number of overlaying "+\ 1849 "variables ('c_var' = "+c_var+")") 1850 print(" ") 1851 exit 1852 end if 1853 if (abs(min(data(varn,:,:))) .GT. 10)then 1854 min_value = abs(0.01*min(data(varn,:,:))) 1855 max_value = abs(0.01*max(data(varn,:,:))) 1568 if (check_vType) then 1569 data = new((/dim,np,dimz/),double) 1570 data_0 = new((/np,dimz/),double) 1571 else 1572 data = new((/dim,np,dimz/),float) 1573 data_0 = new((/np,dimz/),float) 1574 end if 1575 data@_FillValue=9.96921e+36 1576 data_0 = 0.0 1577 t = new((/np,dimz/),float) 1578 t = 0.0 1579 unit = new(dim,string) 1580 if (isvar("z_u"))then 1581 if (typeof(z_u) .EQ. "double")then 1582 z_v = new((/dim,dimz/),double) 1583 z_ = new((/dim,dimz/),double) 1856 1584 else 1857 if (abs(min(data(varn,:,:))) .LT. 0.01 .AND. \ 1858 abs(max(data(varn,:,:))) .GT. 0.01)then 1859 min_value = abs(0.1*max(data(varn,:,:))) 1860 max_value = abs(0.1*max(data(varn,:,:))) 1861 else 1862 if (abs(max(data(varn,:,:))) .LT. 0.01 .AND. \ 1863 abs(min(data(varn,:,:))) .GT. 0.01)then 1864 min_value = abs(0.1*min(data(varn,:,:))) 1865 max_value = abs(0.1*min(data(varn,:,:))) 1866 else 1867 min_value = abs(0.1*min(data(varn,:,:))) 1868 max_value = abs(0.1*max(data(varn,:,:))) 1869 end if 1870 end if 1871 end if 1872 if (min(data(varn,:,:)) .EQ. 0 .AND. \ 1873 max(data(varn,:,:)) .EQ. 0)then 1874 min_value = 0.1 1875 max_value = 0.1 1585 if (typeof(z_u) .EQ. "float")then 1586 z_v = new((/dim,dimz/),float) 1587 z_ = new((/dim,dimz/),float) 1588 end if 1876 1589 end if 1877 mini(n_o)=min(data(varn,:,:)) 1878 maxi(n_o)=max(data(varn,:,:)) 1879 n_o=n_o+1 1880 end if 1881 end if 1882 1883 if(check) then 1884 1885 count_var=count_var+1 1886 1887 if (prof3d .EQ. 0) then 1888 temp = f[:]->$vNam(varn)$ 1889 temp_att = f_att->$vNam(varn)$ 1890 else 1891 if (log_z .EQ. 1) then 1892 do i=1,dimz-1 1893 do j=0,np-1 1894 temp= f[:]->$vNam(varn)$ 1895 temp_att = f_att->$vNam(varn)$ 1896 data_temp = temp(ti_in(j),i,start_y:end_y,start_x:end_x) 1897 data(varn,j,i-1) = dim_avg_Wrap(dim_avg_Wrap(data_temp)) 1898 delete(data_temp) 1899 end do 1900 end do 1901 else 1902 do i=0,dimz-1 1903 do j=0,np-1 1904 temp= f[:]->$vNam(varn)$ 1905 temp_att = f_att->$vNam(varn)$ 1906 data_temp = temp(ti_in(j),i,start_y:end_y,start_x:end_x) 1907 data_temp!0 = "t" 1908 data_temp!1 = "z" 1909 data(varn,j,i) = dim_avg_Wrap(dim_avg_Wrap(data_temp)) 1910 delete(data_temp) 1911 end do 1912 end do 1913 end if 1914 print(" ") 1915 print("Variable '"+vNam(varn)+"' is read") 1916 print(" ") 1917 unit(varn) = temp_att@units 1918 a=getvardims(temp_att) 1919 b=dimsizes(a) 1920 end if 1921 1922 if (prof3d .EQ. 0) then 1923 if (log_z .EQ. 1) then 1924 z = f_att->$vNam(varn+1)$(1:dimz-1) 1925 unit(varn) = temp_att@units 1926 do j=0,np-1 1927 data(varn,j,:) = temp(ti_in(j),1:dimz-1) 1928 end do 1929 else 1930 z = f_att->$vNam(varn+1)$ 1931 unit(varn) = temp_att@units 1932 do j=0,np-1 1933 data(varn,j,:) = temp(ti_in(j),:) 1934 end do 1935 end if 1936 else 1937 do i=0,b-1 1938 if (isStrSubset( a(i),"zu_3d" ))then 1939 z_v(varn,:) = z_u 1940 if (log_z .EQ. 1) then 1941 z = z_v(varn,1:dimz-1) 1942 else 1943 z = z_v(varn,:) 1944 end if 1945 else 1946 if (isStrSubset( a(i),"zw_3d" ))then 1947 z_v(varn,:) = z_w 1948 if (log_z .EQ. 1) then 1949 z = z_v(varn,1:dimz-1) 1950 else 1951 z = z_v(varn,:) 1952 end if 1953 end if 1954 end if 1955 end do 1956 end if 1957 1958 if (isStrSubset(data@long_name," SR " ) ) then 1959 over = 0 1960 end if 1961 1962 if (nof .EQ. 0) then 1963 z_(n,:)=z/norm_z 1964 z = z_(n,:) 1965 else 1966 z=z/norm_z 1967 end if 1968 1969 delta_z = z(2) - z(1) 1970 1971 max_z_int=doubletoint(max_z/delta_z) 1972 min_z_int=doubletoint(min_z/delta_z) 1973 1974 if(max_z_int .eq. min_z_int) 1975 print(" ") 1976 print("Please increase 'max_z' or decrease 'min_z' so that "+\ 1977 "there are") 1978 print("at least two layers for the z-axis to plot") 1979 print(" ") 1980 exit 1981 end if 1982 1983 if(min_z_int .gt. max_z_int) 1984 print(" ") 1985 print("'min_z' is greater than 'max_z',") 1986 print("please change this") 1987 print(" ") 1988 exit 1989 end if 1990 1991 if (max_z_int .ge. dimz-1) 1992 max_z_int = dimz-1 1993 if (log_z .EQ. 1) then 1994 max_z_int = max_z_int - 1 1995 end if 1996 end if 1997 1998 if (min_z_int .lt. 0) 1999 min_z_int = 0 2000 if (log_z .EQ. 1) then 2001 min_z_int = min_z_int + 1 2002 end if 2003 end if 2004 2005 2006 ;data can contain missing values in case of output of t=0h (inital profiles) 2007 ;where no output is possible 2008 n_not_ismissing = num(.not.ismissing(data(varn,:,:))) 2009 2010 if (n_not_ismissing .GT. 0 ) then 2011 2012 if (abs(min(data(varn,:,min_z_int:max_z_int))) .GT. 10)then 2013 min_value = abs(0.001*min(data(varn,:,min_z_int:max_z_int))) 2014 max_value = abs(0.001*max(data(varn,:,min_z_int:max_z_int))) 2015 else 2016 if (abs(min(data(varn,:,min_z_int:max_z_int))) .LT. 0.01 .AND. \ 2017 abs(max(data(varn,:,min_z_int:max_z_int))) .GT. 0.01)then 2018 min_value = abs(0.1*max(data(varn,:,min_z_int:max_z_int))) 2019 max_value = abs(0.1*max(data(varn,:,min_z_int:max_z_int))) 2020 else 2021 if (abs(max(data(varn,:,min_z_int:max_z_int))) .LT. 0.01 .AND.\ 2022 abs(min(data(varn,:,min_z_int:max_z_int))) .GT. 0.01)then 2023 min_value = abs(0.1*min(data(varn,:,min_z_int:max_z_int))) 2024 max_value = abs(0.1*min(data(varn,:,min_z_int:max_z_int))) 2025 else 2026 min_value = abs(0.1*min(data(varn,:,min_z_int:max_z_int))) 2027 max_value = abs(0.1*max(data(varn,:,min_z_int:max_z_int))) 2028 end if 2029 end if 2030 end if 2031 2032 if (min(data(varn,:,min_z_int:max_z_int)) .EQ. 0 .AND. \ 2033 max(data(varn,:,min_z_int:max_z_int)) .EQ. 0)then 2034 min_value = 0.1 2035 max_value = 0.1 2036 end if 2037 2038 else 2039 print(" ") 2040 print(vNam(varn) + " contains only missing values") 2041 print(" ") 2042 end if 2043 2044 if (over .EQ. 0) then 2045 res@gsnLeftString = vNam(varn) 2046 res@tiXAxisString = "("+unit(varn)+")" 2047 res@gsnRightString = " " 2048 res@trYMinF = min_z 2049 res@trYMaxF = max_z 2050 if (xs .EQ. -1) then 2051 res@trXMinF = min(data(varn,:,min_z_int:max_z_int))-\ 2052 min_value 2053 else 2054 res@trXMinF = xs 2055 end if 2056 if (xe .EQ. -1) then 2057 res@trXMaxF = max(data(varn,:,min_z_int:max_z_int))+\ 2058 max_value 2059 else 2060 res@trXMaxF = xe 2061 end if 2062 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2063 end if 2064 2065 2066 if (vNam(varn) .EQ. "u" ) then 2067 miniu=min(data(varn,:,min_z_int:max_z_int))-min_value 2068 maxiu=max(data(varn,:,min_z_int:max_z_int))+max_value 2069 if (over .EQ. 1) then 2070 res@xyDashPattern = 0 2071 plot_u = gsn_csm_xy(wks,data(varn,:,:),z,res) 2072 else 2073 res@gsnLeftString = vNam(varn) 2074 res@tiXAxisString = "("+unit(varn)+")" 2075 res@gsnRightString = " " 2076 if (xs .EQ. -1) then 2077 res@trXMinF = miniu 2078 else 2079 res@trXMinF = xs 2080 end if 2081 if (xe .EQ. -1) then 2082 res@trXMaxF = maxiu 2083 else 2084 res@trXMaxF = xe 2085 end if 2086 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2087 end if 2088 end if 2089 if (vNam(varn) .EQ. "v") then 2090 miniv=min(data(varn,:,min_z_int:max_z_int))-min_value 2091 maxiv=max(data(varn,:,min_z_int:max_z_int))+max_value 2092 if (over .EQ. 1) then 2093 res@xyMonoDashPattern = True 2094 res@xyDashPattern = 1 2095 plot_v = gsn_csm_xy(wks,data(varn,:,:),z,res) 2096 else 2097 res@gsnLeftString = vNam(varn) 2098 res@tiXAxisString = "("+unit(varn)+")" 2099 res@gsnRightString = " " 2100 if (xs .EQ. -1) then 2101 res@trXMinF = miniv 2102 else 2103 res@trXMinF = xs 2104 end if 2105 if (xe .EQ. -1) then 2106 res@trXMaxF = maxiv 2107 else 2108 res@trXMaxF = xe 2109 end if 2110 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2111 end if 2112 end if 2113 if (vNam(varn) .EQ. "w") then 2114 miniw=min(data(varn,:,min_z_int:max_z_int))-min_value 2115 maxiw=max(data(varn,:,min_z_int:max_z_int))+max_value 2116 if (over .EQ. 1) then 2117 res@xyDashPattern = 2 2118 plot_w = gsn_csm_xy(wks,data(varn,:,:),z,res) 2119 else 2120 res@gsnLeftString = vNam(varn) 2121 res@tiXAxisString = "("+unit(varn)+")" 2122 res@gsnRightString = " " 2123 if (xs .EQ. -1) then 2124 res@trXMinF = miniw 2125 else 2126 res@trXMinF = xs 2127 end if 2128 if (xe .EQ. -1) then 2129 res@trXMaxF = maxiw 2130 else 2131 res@trXMaxF = xe 2132 end if 2133 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2134 end if 2135 end if 2136 2137 if (vNam(varn) .EQ. "pt") then 2138 minipt=min(data(varn,:,min_z_int:max_z_int))-min_value 2139 maxipt=max(data(varn,:,min_z_int:max_z_int))+max_value 2140 if (over .EQ. 1) then 2141 res@xyDashPattern = 0 2142 plot_pt = gsn_csm_xy(wks,data(varn,:,:),z,res) 2143 else 2144 res@gsnLeftString = vNam(varn) 2145 res@tiXAxisString = "("+unit(varn)+")" 2146 res@gsnRightString = " " 2147 if (xs .EQ. -1) then 2148 res@trXMinF = minipt 2149 else 2150 res@trXMinF = xs 2151 end if 2152 if (xe .EQ. -1) then 2153 res@trXMaxF = maxipt 2154 else 2155 res@trXMaxF = xe 2156 end if 2157 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2158 end if 2159 end if 2160 if (vNam(varn) .EQ. "vpt") then 2161 minivpt=min(data(varn,:,min_z_int:max_z_int))-min_value 2162 maxivpt=max(data(varn,:,min_z_int:max_z_int))+max_value 2163 if (over .EQ. 1) then 2164 res@xyDashPattern = 1 2165 plot_vpt = gsn_csm_xy(wks,data(varn,:,:),z,res) 2166 else 2167 res@gsnLeftString = vNam(varn) 2168 res@tiXAxisString = "("+unit(varn)+")" 2169 res@gsnRightString = " " 2170 if (xs .EQ. -1) then 2171 res@trXMinF = minivpt 2172 else 2173 res@trXMinF = xs 2174 end if 2175 if (xe .EQ. -1) then 2176 res@trXMaxF = maxivpt 2177 else 2178 res@trXMaxF = xe 2179 end if 2180 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2181 end if 2182 end if 2183 if (vNam(varn) .EQ. "lpt") then 2184 minilpt=min(data(varn,:,min_z_int:max_z_int))-min_value 2185 maxilpt=max(data(varn,:,min_z_int:max_z_int))+max_value 2186 if (over .EQ. 1) then 2187 res@xyDashPattern = 2 2188 plot_lpt = gsn_csm_xy(wks,data(varn,:,:),z,res) 2189 else 2190 res@gsnLeftString = vNam(varn) 2191 res@tiXAxisString = "("+unit(varn)+")" 2192 res@gsnRightString = " " 2193 if (xs .EQ. -1) then 2194 res@trXMinF = minilpt 2195 else 2196 res@trXMinF = xs 2197 end if 2198 if (xe .EQ. -1) then 2199 res@trXMaxF = maxilpt 2200 else 2201 res@trXMaxF = xe 2202 end if 2203 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2204 end if 2205 end if 2206 2207 if (vNam(varn) .EQ. "q") then 2208 miniq=min(data(varn,:,min_z_int:max_z_int))-min_value 2209 maxiq=max(data(varn,:,min_z_int:max_z_int))+max_value 2210 if (over .EQ. 1) then 2211 res@xyDashPattern = 0 2212 plot_q = gsn_csm_xy(wks,data(varn,:,:),z,res) 2213 else 2214 res@gsnLeftString = vNam(varn) 2215 res@tiXAxisString = "("+unit(varn)+")" 2216 res@gsnRightString = " " 2217 if (xs .EQ. -1) then 2218 res@trXMinF = miniq 2219 else 2220 res@trXMinF = xs 2221 end if 2222 if (xe .EQ. -1) then 2223 res@trXMaxF = maxiq 2224 else 2225 res@trXMaxF = xe 2226 end if 2227 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2228 end if 2229 end if 2230 if (vNam(varn) .EQ. "qv") then 2231 miniqv=min(data(varn,:,min_z_int:max_z_int))-min_value 2232 maxiqv=max(data(varn,:,min_z_int:max_z_int))+max_value 2233 if (over .EQ. 1) then 2234 res@xyDashPattern = 1 2235 plot_qv = gsn_csm_xy(wks,data(varn,:,:),z,res) 2236 else 2237 res@gsnLeftString = vNam(varn) 2238 res@tiXAxisString = "("+unit(varn)+")" 2239 res@gsnRightString = " " 2240 if (xs .EQ. -1) then 2241 res@trXMinF = miniqv 2242 else 2243 res@trXMinF = xs 2244 end if 2245 if (xe .EQ. -1) then 2246 res@trXMaxF = maxiqv 2247 else 2248 res@trXMaxF = xe 2249 end if 2250 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2251 end if 2252 end if 2253 if (vNam(varn) .EQ. "ql") then 2254 miniql=min(data(varn,:,min_z_int:max_z_int))-min_value 2255 maxiql=max(data(varn,:,min_z_int:max_z_int))+max_value 2256 if (over .EQ. 1) then 2257 res@xyDashPattern = 2 2258 plot_ql = gsn_csm_xy(wks,data(varn,:,:),z,res) 2259 else 2260 res@gsnLeftString = vNam(varn) 2261 res@tiXAxisString = "("+unit(varn)+")" 2262 res@gsnRightString = " " 2263 if (xs .EQ. -1) then 2264 res@trXMinF = miniql 2265 else 2266 res@trXMinF = xs 2267 end if 2268 if (xe .EQ. -1) then 2269 res@trXMaxF = maxiql 2270 else 2271 res@trXMaxF = xe 2272 end if 2273 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2274 end if 2275 end if 2276 2277 if (vNam(varn) .EQ. "e") then 2278 minie=min(data(varn,:,min_z_int:max_z_int))-min_value 2279 maxie=max(data(varn,:,min_z_int:max_z_int))+max_value 2280 if (over .EQ. 1) then 2281 res@xyDashPattern = 0 2282 plot_e = gsn_csm_xy(wks,data(varn,:,:),z,res) 2283 else 2284 res@gsnLeftString = vNam(varn) 2285 res@tiXAxisString = "("+unit(varn)+")" 2286 res@gsnRightString = " " 2287 if (xs .EQ. -1) then 2288 res@trXMinF = minie 2289 else 2290 res@trXMinF = xs 2291 end if 2292 if (xe .EQ. -1) then 2293 res@trXMaxF = maxie 2294 else 2295 res@trXMaxF = xe 2296 end if 2297 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2298 end if 2299 end if 2300 if (vNam(varn) .EQ. "es" .OR. vNam(varn) .EQ. "e*") then 2301 minies=min(data(varn,:,min_z_int:max_z_int))-min_value 2302 maxies=max(data(varn,:,min_z_int:max_z_int))+max_value 2303 if (over .EQ. 1) then 2304 res@xyDashPattern = 1 2305 plot_es = gsn_csm_xy(wks,data(varn,:,:),z,res) 2306 else 2307 res@gsnLeftString = vNam(varn) 2308 res@tiXAxisString = "("+unit(varn)+")" 2309 res@gsnRightString = " " 2310 if (xs .EQ. -1) then 2311 res@trXMinF = minies 2312 else 2313 res@trXMinF = xs 2314 end if 2315 if (xe .EQ. -1) then 2316 res@trXMaxF = maxies 2317 else 2318 res@trXMaxF = xe 2319 end if 2320 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2321 end if 2322 end if 2323 2324 if (vNam(varn) .EQ. "km") then 2325 minikm=min(data(varn,:,min_z_int:max_z_int))-min_value 2326 maxikm=max(data(varn,:,min_z_int:max_z_int))+max_value 2327 if (over .EQ. 1) then 2328 res@xyDashPattern = 0 2329 plot_km = gsn_csm_xy(wks,data(varn,:,:),z,res) 2330 else 2331 res@gsnLeftString = vNam(varn) 2332 res@tiXAxisString = "("+unit(varn)+")" 2333 res@gsnRightString = " " 2334 if (xs .EQ. -1) then 2335 res@trXMinF = minikm 2336 else 2337 res@trXMinF = xs 2338 end if 2339 if (xe .EQ. -1) then 2340 res@trXMaxF = maxikm 2341 else 2342 res@trXMaxF = xe 2343 end if 2344 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2345 end if 2346 end if 2347 if (vNam(varn) .EQ. "kh") then 2348 minikh=min(data(varn,:,min_z_int:max_z_int))-min_value 2349 maxikh=max(data(varn,:,min_z_int:max_z_int))+max_value 2350 if (over .EQ. 1) then 2351 res@xyDashPattern = 1 2352 plot_kh = gsn_csm_xy(wks,data(varn,:,:),z,res) 2353 else 2354 res@gsnLeftString = vNam(varn) 2355 res@tiXAxisString = "("+unit(varn)+")" 2356 res@gsnRightString = " " 2357 if (xs .EQ. -1) then 2358 res@trXMinF = minikh 2359 else 2360 res@trXMinF = xs 2361 end if 2362 if (xe .EQ. -1) then 2363 res@trXMaxF = maxikh 2364 else 2365 res@trXMaxF = xe 2366 end if 2367 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2368 end if 2369 end if 2370 2371 if (vNam(varn) .EQ. "wpup" .OR. vNam(varn) .EQ. "w"+dq+"u"+dq) then 2372 miniwpup=min(data(varn,:,min_z_int:max_z_int))-min_value 2373 maxiwpup=max(data(varn,:,min_z_int:max_z_int))+max_value 2374 if (over .EQ. 1) then 2375 res@xyDashPattern = 0 2376 plot_wpup = gsn_csm_xy(wks,data(varn,:,:),z,res) 2377 else 2378 res@gsnLeftString = vNam(varn) 2379 res@tiXAxisString = "("+unit(varn)+")" 2380 res@gsnRightString = " " 2381 if (xs .EQ. -1) then 2382 res@trXMinF = miniwpup 2383 else 2384 res@trXMinF = xs 2385 end if 2386 if (xe .EQ. -1) then 2387 res@trXMaxF = maxiwpup 2388 else 2389 res@trXMaxF = xe 2390 end if 2391 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2392 end if 2393 end if 2394 if (vNam(varn) .EQ. "wsus" .OR. vNam(varn) .EQ. "w*u*") then 2395 miniwsus=min(data(varn,:,min_z_int:max_z_int))-min_value 2396 maxiwsus=max(data(varn,:,min_z_int:max_z_int))+max_value 2397 if (over .EQ. 1) then 2398 res@xyDashPattern = 1 2399 plot_wsus = gsn_csm_xy(wks,data(varn,:,:),z,res) 2400 else 2401 res@gsnLeftString = vNam(varn) 2402 res@tiXAxisString = "("+unit(varn)+")" 2403 res@gsnRightString = " " 2404 if (xs .EQ. -1) then 2405 res@trXMinF = miniwsus 2406 else 2407 res@trXMinF = xs 2408 end if 2409 if (xe .EQ. -1) then 2410 res@trXMaxF = maxiwsus 2411 else 2412 res@trXMaxF = xe 2413 end if 2414 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2415 end if 2416 end if 2417 if (vNam(varn) .EQ. "wu") then 2418 miniwu=min(data(varn,:,min_z_int:max_z_int))-min_value 2419 maxiwu=max(data(varn,:,min_z_int:max_z_int))+max_value 2420 if (over .EQ. 1) then 2421 res@xyDashPattern = 2 2422 plot_wu = gsn_csm_xy(wks,data(varn,:,:),z,res) 2423 else 2424 res@gsnLeftString = vNam(varn) 2425 res@tiXAxisString = "("+unit(varn)+")" 2426 res@gsnRightString = " " 2427 if (xs .EQ. -1) then 2428 res@trXMinF = miniwu 2429 else 2430 res@trXMinF = xs 2431 end if 2432 if (xe .EQ. -1) then 2433 res@trXMaxF = maxiwu 2434 else 2435 res@trXMaxF = xe 2436 end if 2437 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2438 end if 2439 end if 2440 2441 if (vNam(varn) .EQ. "wpvp" .OR. vNam(varn) .EQ. "w"+dq+"v"+dq) then 2442 miniwpvp=min(data(varn,:,min_z_int:max_z_int))-min_value 2443 maxiwpvp=max(data(varn,:,min_z_int:max_z_int))+max_value 2444 if (over .EQ. 1) then 2445 res@xyDashPattern = 0 2446 plot_wpvp = gsn_csm_xy(wks,data(varn,:,:),z,res) 2447 else 2448 res@gsnLeftString = vNam(varn) 2449 res@tiXAxisString = "("+unit(varn)+")" 2450 res@gsnRightString = " " 2451 if (xs .EQ. -1) then 2452 res@trXMinF = miniwpvp 2453 else 2454 res@trXMinF = xs 2455 end if 2456 if (xe .EQ. -1) then 2457 res@trXMaxF = maxiwpvp 2458 else 2459 res@trXMaxF = xe 2460 end if 2461 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2462 end if 2463 end if 2464 if (vNam(varn) .EQ. "wsvs" .OR. vNam(varn) .EQ. "w*v*") then 2465 miniwsvs=min(data(varn,:,min_z_int:max_z_int))-min_value 2466 maxiwsvs=max(data(varn,:,min_z_int:max_z_int))+max_value 2467 if (over .EQ. 1) then 2468 res@xyDashPattern = 1 2469 plot_wsvs = gsn_csm_xy(wks,data(varn,:,:),z,res) 2470 else 2471 res@gsnLeftString = vNam(varn) 2472 res@tiXAxisString = "("+unit(varn)+")" 2473 res@gsnRightString = " " 2474 if (xs .EQ. -1) then 2475 res@trXMinF = miniwsvs 2476 else 2477 res@trXMinF = xs 2478 end if 2479 if (xe .EQ. -1) then 2480 res@trXMaxF = maxiwsvs 2481 else 2482 res@trXMaxF = xe 2483 end if 2484 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2485 end if 2486 end if 2487 if (vNam(varn) .EQ. "wv") then 2488 miniwv=min(data(varn,:,min_z_int:max_z_int))-min_value 2489 maxiwv=max(data(varn,:,min_z_int:max_z_int))+max_value 2490 if (over .EQ. 1) then 2491 res@xyDashPattern = 2 2492 plot_wv = gsn_csm_xy(wks,data(varn,:,:),z,res) 2493 else 2494 res@gsnLeftString = vNam(varn) 2495 res@tiXAxisString = "("+unit(varn)+")" 2496 res@gsnRightString = " " 2497 if (xs .EQ. -1) then 2498 res@trXMinF = miniwv 2499 else 2500 res@trXMinF = xs 2501 end if 2502 if (xe .EQ. -1) then 2503 res@trXMaxF = maxiwv 2504 else 2505 res@trXMaxF = xe 2506 end if 2507 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2508 end if 2509 end if 2510 2511 if (vNam(varn) .EQ. "wpptp" .OR. vNam(varn) \ 2512 .EQ. "w"+dq+"pt"+dq) then 2513 miniwpptp=min(data(varn,:,min_z_int:max_z_int))-min_value 2514 maxiwpptp=max(data(varn,:,min_z_int:max_z_int))+max_value 2515 if (over .EQ. 1) then 2516 res@xyDashPattern = 0 2517 plot_wpptp = gsn_csm_xy(wks,data(varn,:,:),z,res) 2518 else 2519 res@gsnLeftString = vNam(varn) 2520 res@tiXAxisString = "("+unit(varn)+")" 2521 res@gsnRightString = " " 2522 if (xs .EQ. -1) then 2523 res@trXMinF = miniwpptp 2524 else 2525 res@trXMinF = xs 2526 end if 2527 if (xe .EQ. -1) then 2528 res@trXMaxF = maxiwpptp 2529 else 2530 res@trXMaxF = xe 2531 end if 2532 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2533 end if 2534 end if 2535 if (vNam(varn) .EQ. "wspts" .OR. vNam(varn) .EQ. "w*pt*") then 2536 miniwspts=min(data(varn,:,min_z_int:max_z_int))-min_value 2537 maxiwspts=max(data(varn,:,min_z_int:max_z_int))+max_value 2538 if (over .EQ. 1) then 2539 res@xyDashPattern = 1 2540 plot_wspts = gsn_csm_xy(wks,data(varn,:,:),z,res) 2541 else 2542 res@gsnLeftString = vNam(varn) 2543 res@tiXAxisString = "("+unit(varn)+")" 2544 res@gsnRightString = " " 2545 if (xs .EQ. -1) then 2546 res@trXMinF = miniwspts 2547 else 2548 res@trXMinF = xs 2549 end if 2550 if (xe .EQ. -1) then 2551 res@trXMaxF = maxiwspts 2552 else 2553 res@trXMaxF = xe 2554 end if 2555 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2556 end if 2557 end if 2558 if (vNam(varn) .EQ. "wpt") then 2559 miniwpt=min(data(varn,:,min_z_int:max_z_int))-min_value 2560 maxiwpt=max(data(varn,:,min_z_int:max_z_int))+max_value 2561 if (over .EQ. 1) then 2562 res@xyDashPattern = 2 2563 plot_wpt = gsn_csm_xy(wks,data(varn,:,:),z,res) 2564 else 2565 res@gsnLeftString = vNam(varn) 2566 res@tiXAxisString = "("+unit(varn)+")" 2567 res@gsnRightString = " " 2568 if (xs .EQ. -1) then 2569 res@trXMinF = miniwpt 2570 else 2571 res@trXMinF = xs 2572 end if 2573 if (xe .EQ. -1) then 2574 res@trXMaxF = maxiwpt 2575 else 2576 res@trXMaxF = xe 2577 end if 2578 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2579 end if 2580 end if 2581 2582 if (vNam(varn) .EQ. "wsptsBC".OR. vNam(varn) .EQ. "w*pt*BC" ) then 2583 miniwsptsBC=min(data(varn,:,min_z_int:max_z_int))-min_value 2584 maxiwsptsBC=max(data(varn,:,min_z_int:max_z_int))+max_value 2585 if (over .EQ. 1) then 2586 res@xyDashPattern = 0 2587 plot_wsptsBC = gsn_csm_xy(wks,data(varn,:,:),z,res) 2588 else 2589 res@gsnLeftString = vNam(varn) 2590 res@tiXAxisString = "("+unit(varn)+")" 2591 res@gsnRightString = " " 2592 if (xs .EQ. -1) then 2593 res@trXMinF = miniwsptsBC 2594 else 2595 res@trXMinF = xs 2596 end if 2597 if (xe .EQ. -1) then 2598 res@trXMaxF = maxiwsptsBC 2599 else 2600 res@trXMaxF = xe 2601 end if 2602 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2603 end if 2604 end if 2605 if (vNam(varn) .EQ. "wptBC") then 2606 miniwptBC=min(data(varn,:,min_z_int:max_z_int))-min_value 2607 maxiwptBC=max(data(varn,:,min_z_int:max_z_int))+max_value 2608 if (over .EQ. 1) then 2609 res@xyDashPattern = 1 2610 plot_wptBC = gsn_csm_xy(wks,data(varn,:,:),z,res) 2611 else 2612 res@gsnLeftString = vNam(varn) 2613 res@tiXAxisString = "("+unit(varn)+")" 2614 res@gsnRightString = " " 2615 if (xs .EQ. -1) then 2616 res@trXMinF = miniwptBC 2617 else 2618 res@trXMinF = xs 2619 end if 2620 if (xe .EQ. -1) then 2621 res@trXMaxF = maxiwptBC 2622 else 2623 res@trXMaxF = xe 2624 end if 2625 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2626 end if 2627 end if 2628 2629 if (vNam(varn) .EQ. "wpvptp" .OR. vNam(varn) \ 2630 .EQ. "w"+dq+"vpt"+dq) then 2631 miniwpvptp=min(data(varn,:,min_z_int:max_z_int))-min_value 2632 maxiwpvptp=max(data(varn,:,min_z_int:max_z_int))+max_value 2633 if (over .EQ. 1) then 2634 res@xyDashPattern = 0 2635 plot_wpvptp = gsn_csm_xy(wks,data(varn,:,:),z,res) 2636 else 2637 res@gsnLeftString = vNam(varn) 2638 res@tiXAxisString = "("+unit(varn)+")" 2639 res@gsnRightString = " " 2640 if (xs .EQ. -1) then 2641 res@trXMinF = miniwpvptp 2642 else 2643 res@trXMinF = xs 2644 end if 2645 if (xe .EQ. -1) then 2646 res@trXMaxF = maxiwpvptp 2647 else 2648 res@trXMaxF = xe 2649 end if 2650 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2651 end if 2652 end if 2653 if (vNam(varn) .EQ. "wsvpts" .OR. vNam(varn) .EQ. "w*vpt*") then 2654 miniwsvpts=min(data(varn,:,min_z_int:max_z_int))-min_value 2655 maxiwsvpts=max(data(varn,:,min_z_int:max_z_int))+max_value 2656 if (over .EQ. 1) then 2657 res@xyDashPattern = 1 2658 plot_wsvpts = gsn_csm_xy(wks,data(varn,:,:),z,res) 2659 else 2660 res@gsnLeftString = vNam(varn) 2661 res@tiXAxisString = "("+unit(varn)+")" 2662 res@gsnRightString = " " 2663 if (xs .EQ. -1) then 2664 res@trXMinF = miniwsvpts 2665 else 2666 res@trXMinF = xs 2667 end if 2668 if (xe .EQ. -1) then 2669 res@trXMaxF = maxiwsvpts 2670 else 2671 res@trXMaxF = xe 2672 end if 2673 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2674 end if 2675 end if 2676 if (vNam(varn) .EQ. "wvpt") then 2677 miniwvpt=min(data(varn,:,min_z_int:max_z_int))-min_value 2678 maxiwvpt=max(data(varn,:,min_z_int:max_z_int))+max_value 2679 if (over .EQ. 1) then 2680 res@xyDashPattern = 2 2681 plot_wvpt = gsn_csm_xy(wks,data(varn,:,:),z,res) 2682 else 2683 res@gsnLeftString = vNam(varn) 2684 res@tiXAxisString = "("+unit(varn)+")" 2685 res@gsnRightString = " " 2686 if (xs .EQ. -1) then 2687 res@trXMinF = miniwvpt 2688 else 2689 res@trXMinF = xs 2690 end if 2691 if (xe .EQ. -1) then 2692 res@trXMaxF = maxiwvpt 2693 else 2694 res@trXMaxF = xe 2695 end if 2696 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2697 end if 2698 end if 2699 2700 if (vNam(varn) .EQ. "wpqp" .OR. vNam(varn) .EQ. "w"+dq+"q"+dq) then 2701 miniwpqp=min(data(varn,:,min_z_int:max_z_int))-min_value 2702 maxiwpqp=max(data(varn,:,min_z_int:max_z_int))+max_value 2703 if (over .EQ. 1) then 2704 res@xyDashPattern = 0 2705 plot_wpqp = gsn_csm_xy(wks,data(varn,:,:),z,res) 2706 else 2707 res@gsnLeftString = vNam(varn) 2708 res@tiXAxisString = "("+unit(varn)+")" 2709 res@gsnRightString = " " 2710 if (xs .EQ. -1) then 2711 res@trXMinF = miniwpqp 2712 else 2713 res@trXMinF = xs 2714 end if 2715 if (xe .EQ. -1) then 2716 res@trXMaxF = maxiwpqp 2717 else 2718 res@trXMaxF = xe 2719 end if 2720 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2721 end if 2722 end if 2723 if (vNam(varn) .EQ. "wsqs".OR. vNam(varn) .EQ. "w*s*" ) then 2724 miniwsqs=min(data(varn,:,min_z_int:max_z_int))-min_value 2725 maxiwsqs=max(data(varn,:,min_z_int:max_z_int))+max_value 2726 if (over .EQ. 1) then 2727 res@xyDashPattern = 1 2728 plot_wsqs = gsn_csm_xy(wks,data(varn,:,:),z,res) 2729 else 2730 res@gsnLeftString = vNam(varn) 2731 res@tiXAxisString = "("+unit(varn)+")" 2732 res@gsnRightString = " " 2733 if (xs .EQ. -1) then 2734 res@trXMinF = miniwsqs 2735 else 2736 res@trXMinF = xs 2737 end if 2738 if (xe .EQ. -1) then 2739 res@trXMaxF = maxiwsqs 2740 else 2741 res@trXMaxF = xe 2742 end if 2743 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2744 end if 2745 end if 2746 if (vNam(varn) .EQ. "wq") then 2747 miniwq=min(data(varn,:,min_z_int:max_z_int))-min_value 2748 maxiwq=max(data(varn,:,min_z_int:max_z_int))+max_value 2749 if (over .EQ. 1) then 2750 res@xyDashPattern = 2 2751 plot_wq = gsn_csm_xy(wks,data(varn,:,:),z,res) 2752 else 2753 res@gsnLeftString = vNam(varn) 2754 res@tiXAxisString = "("+unit(varn)+")" 2755 res@gsnRightString = " " 2756 if (xs .EQ. -1) then 2757 res@trXMinF = miniwq 2758 else 2759 res@trXMinF = xs 2760 end if 2761 if (xe .EQ. -1) then 2762 res@trXMaxF = maxiwq 2763 else 2764 res@trXMaxF = xe 2765 end if 2766 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2767 end if 2768 end if 2769 2770 if (vNam(varn) .EQ. "wpqvp" .OR. \ 2771 vNam(varn) .EQ. "w"+dq+"qv"+dq) then 2772 miniwpqvp=min(data(varn,:,min_z_int:max_z_int))-min_value 2773 maxiwpqvp=max(data(varn,:,min_z_int:max_z_int))+max_value 2774 if (over .EQ. 1) then 2775 res@xyDashPattern = 0 2776 plot_wpqvp = gsn_csm_xy(wks,data(varn,:,:),z,res) 2777 else 2778 res@gsnLeftString = vNam(varn) 2779 res@tiXAxisString = "("+unit(varn)+")" 2780 res@gsnRightString = " " 2781 if (xs .EQ. -1) then 2782 res@trXMinF = miniwpqvp 2783 else 2784 res@trXMinF = xs 2785 end if 2786 if (xe .EQ. -1) then 2787 res@trXMaxF = maxiwpqvp 2788 else 2789 res@trXMaxF = xe 2790 end if 2791 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2792 end if 2793 end if 2794 if (vNam(varn) .EQ. "wsqvs" .OR. vNam(varn) .EQ. "w*qv*") then 2795 miniwsqvs=min(data(varn,:,min_z_int:max_z_int))-min_value 2796 maxiwsqvs=max(data(varn,:,min_z_int:max_z_int))+max_value 2797 if (over .EQ. 1) then 2798 res@xyDashPattern = 1 2799 plot_wsqvs = gsn_csm_xy(wks,data(varn,:,:),z,res) 2800 else 2801 res@gsnLeftString = vNam(varn) 2802 res@tiXAxisString = "("+unit(varn)+")" 2803 res@gsnRightString = " " 2804 if (xs .EQ. -1) then 2805 res@trXMinF = miniwsqvs 2806 else 2807 res@trXMinF = xs 2808 end if 2809 if (xe .EQ. -1) then 2810 res@trXMaxF = maxiwsqvs 2811 else 2812 res@trXMaxF = xe 2813 end if 2814 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2815 end if 2816 end if 2817 if (vNam(varn) .EQ. "wqv") then 2818 miniwqv=min(data(varn,:,min_z_int:max_z_int))-min_value 2819 maxiwqv=max(data(varn,:,min_z_int:max_z_int))+max_value 2820 if (over .EQ. 1) then 2821 res@xyDashPattern = 2 2822 plot_wqv = gsn_csm_xy(wks,data(varn,:,:),z,res) 2823 else 2824 res@gsnLeftString = vNam(varn) 2825 res@tiXAxisString = "("+unit(varn)+")" 2826 res@gsnRightString = " " 2827 if (xs .EQ. -1) then 2828 res@trXMinF = miniwqv 2829 else 2830 res@trXMinF = xs 2831 end if 2832 if (xe .EQ. -1) then 2833 res@trXMaxF = maxiwqv 2834 else 2835 res@trXMaxF = xe 2836 end if 2837 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2838 end if 2839 end if 2840 2841 if (vNam(varn) .EQ. "wpsp" .OR. vNam(varn) .EQ. "w"+dq+"s"+dq) then 2842 miniwpsp=min(data(varn,:,min_z_int:max_z_int))-min_value 2843 maxiwpsp=max(data(varn,:,min_z_int:max_z_int))+max_value 2844 if (over .EQ. 1) then 2845 res@xyDashPattern = 0 2846 plot_wpsp = gsn_csm_xy(wks,data(varn,:,:),z,res) 2847 else 2848 res@gsnLeftString = vNam(varn) 2849 res@tiXAxisString = "("+unit(varn)+")" 2850 res@gsnRightString = " " 2851 if (xs .EQ. -1) then 2852 res@trXMinF = miniwpsp 2853 else 2854 res@trXMinF = xs 2855 end if 2856 if (xe .EQ. -1) then 2857 res@trXMaxF = maxiwpsp 2858 else 2859 res@trXMaxF = xe 2860 end if 2861 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2862 end if 2863 end if 2864 if (vNam(varn) .EQ. "wsss" .OR. vNam(varn) .EQ. "w*s*" ) then 2865 miniwsss=min(data(varn,:,min_z_int:max_z_int))-min_value 2866 maxiwsss=max(data(varn,:,min_z_int:max_z_int))+max_value 2867 if (over .EQ. 1) then 2868 res@xyDashPattern = 1 2869 plot_wsss = gsn_csm_xy(wks,data(varn,:,:),z,res) 2870 else 2871 res@gsnLeftString = vNam(varn) 2872 res@tiXAxisString = "("+unit(varn)+")" 2873 res@gsnRightString = " " 2874 if (xs .EQ. -1) then 2875 res@trXMinF = miniwsss 2876 else 2877 res@trXMinF = xs 2878 end if 2879 if (xe .EQ. -1) then 2880 res@trXMaxF = maxiwsss 2881 else 2882 res@trXMaxF = xe 2883 end if 2884 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2885 end if 2886 end if 2887 if (vNam(varn) .EQ. "ws") then 2888 miniws=min(data(varn,:,min_z_int:max_z_int))-min_value 2889 maxiws=max(data(varn,:,min_z_int:max_z_int))+max_value 2890 if (over .EQ. 1) then 2891 res@xyDashPattern = 2 2892 plot_ws = gsn_csm_xy(wks,data(varn,:,:),z,res) 2893 else 2894 res@gsnLeftString = vNam(varn) 2895 res@tiXAxisString = "("+unit(varn)+")" 2896 res@gsnRightString = " " 2897 if (xs .EQ. -1) then 2898 res@trXMinF = miniws 2899 else 2900 res@trXMinF = xs 2901 end if 2902 if (xe .EQ. -1) then 2903 res@trXMaxF = maxiws 2904 else 2905 res@trXMaxF = xe 2906 end if 2907 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2908 end if 2909 end if 2910 2911 if (vNam(varn) .EQ. "wpsap" .OR. \ 2912 vNam(varn) .EQ. "w"+dq+"sa"+dq) then 2913 miniwpsap=min(data(varn,:,min_z_int:max_z_int))-min_value 2914 maxiwpsap=max(data(varn,:,min_z_int:max_z_int))+max_value 2915 if (over .EQ. 1) then 2916 res@xyDashPattern = 0 2917 plot_wpsap = gsn_csm_xy(wks,data(varn,:,:),z,res) 2918 else 2919 res@gsnLeftString = vNam(varn) 2920 res@tiXAxisString = "("+unit(varn)+")" 2921 res@gsnRightString = " " 2922 if (xs .EQ. -1) then 2923 res@trXMinF = miniwpsap 2924 else 2925 res@trXMinF = xs 2926 end if 2927 if (xe .EQ. -1) then 2928 res@trXMaxF = maxiwpsap 2929 else 2930 res@trXMaxF = xe 2931 end if 2932 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2933 end if 2934 end if 2935 if (vNam(varn) .EQ. "wssas" .OR. vNam(varn) .EQ. "w*sa*") then 2936 miniwssas=min(data(varn,:,min_z_int:max_z_int))-min_value 2937 maxiwssas=max(data(varn,:,min_z_int:max_z_int))+max_value 2938 if (over .EQ. 1) then 2939 res@xyDashPattern = 1 2940 plot_wssas = gsn_csm_xy(wks,data(varn,:,:),z,res) 2941 else 2942 res@gsnLeftString = vNam(varn) 2943 res@tiXAxisString = "("+unit(varn)+")" 2944 res@gsnRightString = " " 2945 if (xs .EQ. -1) then 2946 res@trXMinF = miniwssas 2947 else 2948 res@trXMinF = xs 2949 end if 2950 if (xe .EQ. -1) then 2951 res@trXMaxF = maxiwssas 2952 else 2953 res@trXMaxF = xe 2954 end if 2955 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2956 end if 2957 end if 2958 if (vNam(varn) .EQ. "wsa") then 2959 miniwsa=min(data(varn,:,min_z_int:max_z_int))-min_value 2960 maxiwsa=max(data(varn,:,min_z_int:max_z_int))+max_value 2961 if (over .EQ. 1) then 2962 res@xyDashPattern = 2 2963 plot_wsa = gsn_csm_xy(wks,data(varn,:,:),z,res) 2964 else 2965 res@gsnLeftString = vNam(varn) 2966 res@tiXAxisString = "("+unit(varn)+")" 2967 res@gsnRightString = " " 2968 if (xs .EQ. -1) then 2969 res@trXMinF = miniwsa 2970 else 2971 res@trXMinF = xs 2972 end if 2973 if (xe .EQ. -1) then 2974 res@trXMaxF = maxiwsa 2975 else 2976 res@trXMaxF = xe 2977 end if 2978 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2979 end if 2980 end if 2981 2982 if (vNam(varn) .EQ. "us2" .OR. vNam(varn) .EQ. "u*2") then 2983 minius2=min(data(varn,:,min_z_int:max_z_int))-min_value 2984 maxius2=max(data(varn,:,min_z_int:max_z_int))+max_value 2985 if (over .EQ. 1) then 2986 res@xyDashPattern = 0 2987 plot_us2 = gsn_csm_xy(wks,data(varn,:,:),z,res) 2988 else 2989 res@gsnLeftString = vNam(varn) 2990 res@tiXAxisString = "("+unit(varn)+")" 2991 res@gsnRightString = " " 2992 if (xs .EQ. -1) then 2993 res@trXMinF = minius2 2994 else 2995 res@trXMinF = xs 2996 end if 2997 if (xe .EQ. -1) then 2998 res@trXMaxF = maxius2 2999 else 3000 res@trXMaxF = xe 3001 end if 3002 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3003 end if 3004 end if 3005 if (vNam(varn) .EQ. "vs2" .OR. vNam(varn) .EQ. "v*2") then 3006 minivs2=min(data(varn,:,min_z_int:max_z_int))-min_value 3007 maxivs2=max(data(varn,:,min_z_int:max_z_int))+max_value 3008 if (over .EQ. 1) then 3009 res@xyDashPattern = 1 3010 plot_vs2 = gsn_csm_xy(wks,data(varn,:,:),z,res) 3011 else 3012 res@gsnLeftString = vNam(varn) 3013 res@tiXAxisString = "("+unit(varn)+")" 3014 res@gsnRightString = " " 3015 if (xs .EQ. -1) then 3016 res@trXMinF = minivs2 3017 else 3018 res@trXMinF = xs 3019 end if 3020 if (xe .EQ. -1) then 3021 res@trXMaxF = maxivs2 3022 else 3023 res@trXMaxF = xe 3024 end if 3025 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3026 end if 3027 end if 3028 if (vNam(varn) .EQ. "ws2" .OR. vNam(varn) .EQ. "w*2") then 3029 miniws2=min(data(varn,:,min_z_int:max_z_int))-min_value 3030 maxiws2=max(data(varn,:,min_z_int:max_z_int))+max_value 3031 if (over .EQ. 1) then 3032 res@xyDashPattern = 2 3033 plot_ws2 = gsn_csm_xy(wks,data(varn,:,:),z,res) 3034 else 3035 res@gsnLeftString = vNam(varn) 3036 res@tiXAxisString = "("+unit(varn)+")" 3037 res@gsnRightString = " " 3038 if (xs .EQ. -1) then 3039 res@trXMinF = miniws2 3040 else 3041 res@trXMinF = xs 3042 end if 3043 if (xe .EQ. -1) then 3044 res@trXMaxF = maxiws2 3045 else 3046 res@trXMaxF = xe 3047 end if 3048 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3049 end if 3050 end if 3051 3052 if (vNam(varn) .EQ. "wsususodz" .OR. \ 3053 vNam(varn) .EQ. "w*u*u*:dz") then 3054 miniwsususodz=min(data(varn,:,min_z_int:max_z_int))-min_value 3055 maxiwsususodz=max(data(varn,:,min_z_int:max_z_int))+max_value 3056 if (over .EQ. 1) then 3057 res@xyDashPattern = 0 3058 plot_wsususodz = gsn_csm_xy(wks,data(varn,:,:),z,res) 3059 else 3060 res@gsnLeftString = vNam(varn) 3061 res@tiXAxisString = "("+unit(varn)+")" 3062 res@gsnRightString = " " 3063 if (xs .EQ. -1) then 3064 res@trXMinF = miniwsususodz 3065 else 3066 res@trXMinF = xs 3067 end if 3068 if (xe .EQ. -1) then 3069 res@trXMaxF = maxiwsususodz 3070 else 3071 res@trXMaxF = xe 3072 end if 3073 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3074 end if 3075 end if 3076 if (vNam(varn) .EQ. "wspsodz" .OR. vNam(varn) .EQ. "w*p*:dz") then 3077 miniwspsodz=min(data(varn,:,min_z_int:max_z_int))-min_value 3078 maxiwspsodz=max(data(varn,:,min_z_int:max_z_int))+max_value 3079 if (over .EQ. 1) then 3080 res@xyDashPattern = 1 3081 plot_wspsodz = gsn_csm_xy(wks,data(varn,:,:),z,res) 3082 else 3083 res@gsnLeftString = vNam(varn) 3084 res@tiXAxisString = "("+unit(varn)+")" 3085 res@gsnRightString = " " 3086 if (xs .EQ. -1) then 3087 res@trXMinF = miniwspsodz 3088 else 3089 res@trXMinF = xs 3090 end if 3091 if (xe .EQ. -1) then 3092 res@trXMaxF = maxiwspsodz 3093 else 3094 res@trXMaxF = xe 3095 end if 3096 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3097 end if 3098 end if 3099 if (vNam(varn) .EQ. "wpeodz" .OR. \ 3100 vNam(varn) .EQ. "w"+dq+"p:dz") then 3101 miniwpeodz=min(data(varn,:,min_z_int:max_z_int))-min_value 3102 maxiwpeodz=max(data(varn,:,min_z_int:max_z_int))+max_value 3103 if (over .EQ. 1) then 3104 res@xyDashPattern = 2 3105 plot_wpeodz = gsn_csm_xy(wks,data(varn,:,:),z,res) 3106 else 3107 res@gsnLeftString = vNam(varn) 3108 res@tiXAxisString = "("+unit(varn)+")" 3109 res@gsnRightString = " " 3110 if (xs .EQ. -1) then 3111 res@trXMinF = miniwpeodz 3112 else 3113 res@trXMinF = xs 3114 end if 3115 if (xe .EQ. -1) then 3116 res@trXMaxF = maxiwpeodz 3117 else 3118 res@trXMaxF = xe 3119 end if 3120 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3121 end if 3122 end if 3123 if (no_files .GT. 1) then 3124 print("nof="+nof+" und n="+n) 3125 multi_plot(nof,n)=plot(n) 3126 max_nof(nof,n)=max(data(varn,:,min_z_int:max_z_int)) 3127 min_nof(nof,n)=min(data(varn,:,min_z_int:max_z_int)) 3128 name(nof,n) =vNam(varn) 3129 unit_(nof,n) =unit(varn) 3130 end if 3131 if (over .EQ. 0) then 3132 n=n+1 3133 end if 3134 if (prof3d .EQ. 0)then 3135 varn=varn+1 3136 end if 3137 delete(temp) 3138 delete(temp_att) 3139 end if 3140 end do 3141 if (no_files .GT. 1) then 3142 delete(vNam) 3143 delete(files) 3144 end if 3145 3146 end do 3147 ;#########ENDE DO LOOP FOR no_files GT 1############# 3148 3149 if (isStrSubset(data@long_name," SR " ) .and. over_remind) then 3150 print(" ") 3151 print("If you have outputs of statistic regions you cannot overlay "+\ 3152 "variables;") 3153 print("'over' is set to 0" ) 3154 print(" ") 3155 over = 0 3156 end if 3157 3158 if (count_var .EQ. 0) then 3159 print(" ") 3160 print("The variables 'var="+var+"'" ) 3161 print("do not exist on your input file;") 3162 print("be sure to have one comma before and after each variable") 3163 print(" ") 3164 exit 3165 end if 3166 3167 if (no_files .GT. 1) then 3168 multi_legend=new(6,string) 3169 string_len=new(6,integer) 3170 multi_dash=new(no_files,string) 3171 multi_legend(0)=" "+name_legend_1 3172 string_len(0)=strlen(multi_legend(0)) 3173 multi_legend(1)=" "+name_legend_2 3174 string_len(1)=strlen(multi_legend(1)) 3175 multi_legend(2)=" "+name_legend_3 3176 string_len(2)=strlen(multi_legend(2)) 3177 multi_legend(3)=" "+name_legend_4 3178 string_len(3)=strlen(multi_legend(3)) 3179 multi_legend(4)=" "+name_legend_5 3180 string_len(4)=strlen(multi_legend(4)) 3181 multi_legend(5)=" "+name_legend_6 3182 string_len(5)=strlen(multi_legend(5)) 3183 do ml=1,no_files 3184 multi_dash(ml-1)=ml-1 3185 end do 3186 delete(plot) 3187 plot = new(dim,graphic) 3188 do pl=0,n-1 3189 plot0 = new(1,graphic) 3190 res@trXMinF = min(min_nof(:,pl)) 3191 res@trXMaxF = max(max_nof(:,pl)) 3192 res@gsnLeftString = name(0,pl) 3193 res@gsnRightString = unit_(0,pl) 3194 res@tiXAxisString = "("+unit_(0,pl)+")" 3195 3196 data_0(:,:) = min(min_nof(:,pl)) 3197 plot0 = gsn_csm_xy(wks,data_0(:,:),z_(pl,:),res) 3198 3199 ; *************************************************** 3200 ; legend for combined plot 3201 ; *************************************************** 3202 3203 lgres = True 3204 lgMonoDashIndex = False 3205 lgres@lgLabelFont = "helvetica" 3206 lgres@lgLabelFontHeightF = font_size_legend*10.0 3207 lgres@vpWidthF = max(string_len)*0.015 3208 lgres@vpHeightF = 0.03*no_files 3209 lgres@lgDashIndexes = multi_dash(no_files-1:0) 3210 lbid = gsn_create_legend(\ 3211 wks,no_files,multi_legend(no_files-1:0),lgres) 3212 3213 amres = True 3214 amres@amParallelPosF = max(string_len)*0.012+0.78 3215 amres@amOrthogonalPosF = -0.0315*no_files+0.431 3216 annoid1 = gsn_add_annotation(plot0,lbid,amres) 3217 3218 do plo=0,no_files-1 3219 overlay(plot0,multi_plot(plo,pl)) 3220 plot(pl)=plot0 3221 end do 3222 delete(plot0) 3223 end do 3224 end if 3225 3226 if (count_var .EQ. 0) then 3227 print(" ") 3228 print("Select a variable 'var=' or use the default value") 3229 print(" ") 3230 print("Your selection '"+var+"' does not exist on the input file") 3231 print(" ") 3232 exit 3233 end if 3234 3235 if (over .EQ. 1 ) then 3236 3237 overlay(plot_u,plot_v) 3238 overlay(plot_u,plot_w) 3239 u=0 3240 overlay(plot_pt,plot_vpt) 3241 overlay(plot_pt,plot_lpt) 3242 pt=0 3243 overlay(plot_q,plot_qv) 3244 overlay(plot_q,plot_ql) 3245 q=0 3246 overlay(plot_e,plot_es) 3247 e=0 3248 overlay(plot_km,plot_kh) 3249 km=0 3250 overlay(plot_wpup,plot_wsus) 3251 overlay(plot_wpup,plot_wu) 3252 wpup=0 3253 overlay(plot_wpvp,plot_wsvs) 3254 overlay(plot_wpvp,plot_wv) 3255 wpvp=0 3256 overlay(plot_wpptp,plot_wspts) 3257 overlay(plot_wpptp,plot_wpt) 3258 wpptp=0 3259 overlay(plot_wsptsBC,plot_wptBC) 3260 wsptsBC=0 3261 overlay(plot_wpvptp,plot_wsvpts) 3262 overlay(plot_wpvptp,plot_wvpt) 3263 wpvptp=0 3264 overlay(plot_wpqp,plot_wsqs) 3265 overlay(plot_wpqp,plot_wq) 3266 wpqp=0 3267 overlay(plot_wpqvp,plot_wsqvs) 3268 overlay(plot_wpqvp,plot_wqv) 3269 wpqvp=0 3270 overlay(plot_wpsp,plot_wsss) 3271 overlay(plot_wpsp,plot_ws) 3272 wpsp=0 3273 overlay(plot_wpsap,plot_wssas) 3274 overlay(plot_wpsap,plot_wsa) 3275 wpsap=0 3276 overlay(plot_us2,plot_vs2) 3277 overlay(plot_us2,plot_ws2) 3278 us2=0 3279 overlay(plot_wsususodz,plot_wspsodz) 3280 overlay(plot_wsususodz,plot_wpeodz) 3281 wsususodz=0 3282 3283 end if 3284 3285 if (over .EQ. 1) then 3286 3287 do varn = 0,dim-1 3288 3289 check = True 3290 3291 if (prof3d .EQ. 0) then 3292 if ( isStrSubset( vNam(varn), "time") .OR. \ 3293 isStrSubset( vNam(varn), "NORM")) then 3294 check = False 3295 end if 3296 else 3297 if ( isStrSubset( vNam(varn), "time") .OR. \ 3298 isStrSubset( vNam(varn), "zusi") .OR. \ 3299 isStrSubset( vNam(varn), "zwwi") .OR. \ 3300 isStrSubset( vNam(varn), "x") .OR. \ 3301 isStrSubset( vNam(varn), "xu") .OR. \ 3302 isStrSubset( vNam(varn), "y") .OR. \ 3303 isStrSubset( vNam(varn), "yv") .OR. \ 3304 isStrSubset( vNam(varn), "zu_3d") .OR. \ 3305 isStrSubset( vNam(varn), "zw_3d")) then 3306 check = False 3307 end if 3308 end if 3309 3310 if (var .NE. "all") then 3311 check = isStrSubset( var,","+vNam(varn)+"," ) 3312 end if 3313 3314 if (check)then 3315 3316 if (prof3d .EQ. 0) then 3317 if (log_z .EQ. 1) then 3318 z = f_att->$vNam(varn+1)$(1:dimz-1) 3319 else 3320 z = f_att->$vNam(varn+1)$ 3321 end if 3322 else 3323 do i=0,b-1 3324 if (isStrSubset( a(i),"zu_3d" ))then 3325 z_v(varn,:) = z_u 3326 if (log_z .EQ. 1) then 3327 z = z_v(varn,1:dimz-1) 3328 else 3329 z = z_v(varn,:) 3330 end if 3331 else 3332 if (isStrSubset( a(i),"zw_3d" ))then 3333 z_v(varn,:) = z_w 3334 if (log_z .EQ. 1) then 3335 z = z_v(varn,1:dimz-1) 3336 else 3337 z = z_v(varn,:) 3338 end if 3339 end if 3340 end if 3341 end do 3342 end if 3343 3344 z=z/norm_z 3345 3346 if (abs(min(data(varn,:,min_z_int:max_z_int))) .GT. 10)then 3347 min_value = abs(0.01*min(data(varn,:,min_z_int:max_z_int))) 3348 max_value = abs(0.01*max(data(varn,:,min_z_int:max_z_int))) 3349 else 3350 if (abs(min(data(varn,:,min_z_int:max_z_int))) .LT. 0.01 .AND. \ 3351 abs(max(data(varn,:,min_z_int:max_z_int))) .GT. 0.01)then 3352 min_value = abs(0.1*max(data(varn,:,min_z_int:max_z_int))) 3353 max_value = abs(0.1*max(data(varn,:,min_z_int:max_z_int))) 3354 else 3355 if (abs(max(data(varn,:,:))) .LT. 0.01 .AND. \ 3356 abs(min(data(varn,:,min_z_int:max_z_int))) .GT. 0.01)then 3357 min_value = abs(0.1*min(data(varn,:,min_z_int:max_z_int))) 3358 max_value = abs(0.1*min(data(varn,:,min_z_int:max_z_int))) 3359 else 3360 min_value = abs(0.1*min(data(varn,:,min_z_int:max_z_int))) 3361 max_value = abs(0.1*max(data(varn,:,min_z_int:max_z_int))) 3362 end if 3363 end if 3364 end if 3365 if (min(data(varn,:,min_z_int:max_z_int)) .EQ. 0 .AND.\ 3366 max(data(varn,:,min_z_int:max_z_int)) .EQ. 0)then 3367 min_value = 0.1 3368 max_value = 0.1 1590 else 1591 if (isvar("z_w"))then 1592 if (typeof(z_w) .EQ. "double")then 1593 z_v = new((/dim,dimz/),double) 1594 z_ = new((/dim,dimz/),double) 1595 else 1596 if (typeof(z_w) .EQ. "float")then 1597 z_v = new((/dim,dimz/),float) 1598 z_ = new((/dim,dimz/),float) 1599 end if 1600 end if 3369 1601 end if 3370 3371 res@gsnLeftString = vNam(varn) 3372 res@tiXAxisString = "("+unit(varn)+")" 3373 res@gsnRightString = " " 3374 res@trYMinF = min_z 3375 res@trYMaxF = max_z 3376 res@xyDashPattern = 0 3377 3378 if (xs .EQ. -1) then 3379 res@trXMinF = min(data(varn,:,min_z_int:max_z_int))-min_value 3380 else 3381 res@trXMinF = xs 3382 end if 3383 if (xe .EQ. -1) then 3384 res@trXMaxF = max(data(varn,:,min_z_int:max_z_int))+max_value 3385 else 3386 res@trXMaxF = xe 3387 end if 3388 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3389 3390 if (vNam(varn) .EQ. "u" .OR. vNam(varn) .EQ. "v" .OR. \ 3391 vNam(varn) .EQ. "w") then 3392 if (u .EQ. 0) then 3393 res@gsnLeftString = "u, v and w" 3394 res@tiXAxisString = "("+unit(varn)+")" 3395 res@gsnRightString = " " 3396 if (xs .EQ. -1) then 3397 res@trXMinF = min((/miniu,miniv,miniw/)) 3398 else 3399 res@trXMinF = xs 3400 end if 3401 if (xe .EQ. -1) then 3402 res@trXMaxF = max((/maxiu,maxiv,maxiw/)) 3403 else 3404 res@trXMaxF = xe 3405 end if 3406 if (vNam(varn) .EQ. "v")then 3407 res@xyDashPattern = 1 3408 end if 3409 if (vNam(varn) .EQ. "w")then 3410 res@xyDashPattern = 2 3411 end if 3412 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3413 3414 ; *************************************************** 3415 ; legend for overlaid plot 3416 ; *************************************************** 3417 3418 lgres = True 3419 lgMonoDashIndex = False 3420 lgres@lgLabelFont = "helvetica" 3421 lgres@lgLabelFontHeightF = font_size_legend*10.0 3422 lgres@vpWidthF = 0.07 3423 lgres@vpHeightF = 0.12 3424 lgres@lgDashIndexes = (/0,1,2/) 3425 lbid = gsn_create_legend(wks,3,(/"u","v","w"/),lgres) 3426 3427 amres = True 3428 amres@amParallelPosF = 0.88 3429 amres@amOrthogonalPosF = 0.33 3430 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3431 overlay(plot(n),plot_u) 3432 u=1 3433 else 3434 if (prof3d .EQ. 0)then 3435 varn=varn+1 3436 end if 3437 continue 3438 end if 3439 end if 3440 3441 if (vNam(varn) .EQ. "pt" .OR. vNam(varn) .EQ. "vpt" .OR. \ 3442 vNam(varn) .EQ. "lpt") then 3443 if (pt .EQ. 0) then 3444 res@gsnLeftString = "pt, vpt and lpt" 3445 res@tiXAxisString = "("+unit(varn)+")" 3446 res@gsnRightString = " " 3447 if (xs .EQ. -1) then 3448 res@trXMinF = min((/minipt,minivpt,minilpt/)) 3449 else 3450 res@trXMinF = xs 3451 end if 3452 if (xe .EQ. -1) then 3453 res@trXMaxF = max((/maxipt,maxivpt,maxilpt/)) 3454 else 3455 res@trXMaxF = xe 3456 end if 3457 if (vNam(varn) .EQ. "vpt")then 3458 res@xyDashPattern = 1 3459 end if 3460 if (vNam(varn) .EQ. "lpt")then 3461 res@xyDashPattern = 2 3462 end if 3463 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3464 3465 ; *************************************************** 3466 ; legend for overlaid plot 3467 ; *************************************************** 3468 3469 lgres = True 3470 lgMonoDashIndex = False 3471 lgres@lgLabelFont = "helvetica" 3472 lgres@lgLabelFontHeightF = font_size_legend*10.0 3473 lgres@vpWidthF = 0.07 3474 lgres@vpHeightF = 0.12 3475 lgres@lgDashIndexes = (/0,1,2/) 3476 lbid = gsn_create_legend(wks,3,(/"pt","vpt","lpt"/),lgres) 3477 amres = True 3478 amres@amParallelPosF = 0.88 3479 amres@amOrthogonalPosF = 0.33 3480 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3481 overlay(plot(n),plot_pt) 3482 pt=1 3483 else 3484 if (prof3d .EQ. 0)then 3485 varn=varn+1 3486 end if 3487 continue 3488 end if 3489 end if 3490 if (vNam(varn) .EQ. "q" .OR. vNam(varn) .EQ. "qv" .OR. \ 3491 vNam(varn) .EQ. "ql") then 3492 if (q .EQ. 0) then 3493 res@gsnLeftString = "q, qv and ql" 3494 res@tiXAxisString = "("+unit(varn)+")" 3495 res@gsnRightString = " " 3496 if (xs .EQ. -1) then 3497 res@trXMinF = min((/miniq,miniqv,miniql/)) 3498 else 3499 res@trXMinF = xs 3500 end if 3501 if (xe .EQ. -1) then 3502 res@trXMaxF = max((/maxiq,maxiqv,maxiql/)) 3503 else 3504 res@trXMaxF = xe 3505 end if 3506 if (vNam(varn) .EQ. "qv")then 3507 res@xyDashPattern = 1 3508 end if 3509 if (vNam(varn) .EQ. "ql")then 3510 res@xyDashPattern = 2 3511 end if 3512 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3513 3514 ; *************************************************** 3515 ; legend for overlaid plot 3516 ; *************************************************** 3517 3518 lgres = True 3519 lgMonoDashIndex = False 3520 lgres@lgLabelFont = "helvetica" 3521 lgres@lgLabelFontHeightF = font_size_legend*10.0 3522 lgres@vpWidthF = 0.07 3523 lgres@vpHeightF = 0.12 3524 lgres@lgDashIndexes = (/0,1,2/) 3525 lbid = gsn_create_legend(wks,3,(/"q","qv","ql"/),lgres) 3526 3527 amres = True 3528 amres@amParallelPosF = 0.88 3529 amres@amOrthogonalPosF = 0.33 3530 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3531 overlay(plot(n),plot_q) 3532 q=1 3533 else 3534 if (prof3d .EQ. 0)then 3535 varn=varn+1 3536 end if 3537 continue 3538 end if 3539 end if 3540 3541 if (vNam(varn) .EQ. "e" .OR. vNam(varn) .EQ. "es" .OR. \ 3542 vNam(varn) .EQ. "e*" ) then 3543 if (e .EQ. 0) then 3544 res@gsnLeftString = "e and e*" 3545 res@tiXAxisString = "("+unit(varn)+")" 3546 res@gsnRightString = " " 3547 if (xs .EQ. -1) then 3548 res@trXMinF = min((/minie,minies/)) 3549 else 3550 res@trXMinF = xs 3551 end if 3552 if (xe .EQ. -1) then 3553 res@trXMaxF = max((/maxie,maxies/)) 3554 else 3555 res@trXMaxF = xe 3556 end if 3557 if (vNam(varn) .EQ. "es")then 3558 res@xyDashPattern = 1 3559 end if 3560 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3561 3562 ; *************************************************** 3563 ; legend for overlaid plot 3564 ; *************************************************** 3565 3566 lgres = True 3567 lgMonoDashIndex = False 3568 lgres@lgLabelFont = "helvetica" 3569 lgres@lgLabelFontHeightF = font_size_legend*10.0 3570 lgres@vpWidthF = 0.07 3571 lgres@vpHeightF = 0.08 3572 lgres@lgDashIndexes = (/0,1,2/) 3573 lbid = gsn_create_legend(wks,2,(/"e","e*"/),lgres) 3574 3575 amres = True 3576 amres@amParallelPosF = 0.88 3577 amres@amOrthogonalPosF = 0.365 3578 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3579 overlay(plot(n),plot_e) 3580 e=1 3581 else 3582 if (prof3d .EQ. 0)then 3583 varn=varn+1 3584 end if 3585 continue 3586 end if 3587 end if 3588 if (vNam(varn) .EQ. "km" .OR. vNam(varn) .EQ. "kh") then 3589 if (km .EQ. 0) then 3590 res@gsnLeftString = "km and kh" 3591 res@tiXAxisString = "("+unit(varn)+")" 3592 res@gsnRightString = " " 3593 if (xs .EQ. -1) then 3594 res@trXMinF = min((/minikm,minikh/)) 3595 else 3596 res@trXMinF = xs 3597 end if 3598 if (xe .EQ. -1) then 3599 res@trXMaxF = max((/maxikm,maxikh/)) 3600 else 3601 res@trXMaxF = xe 3602 end if 3603 if (vNam(varn) .EQ. "kh")then 3604 res@xyDashPattern = 1 3605 end if 3606 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3607 3608 ; *************************************************** 3609 ; legend for overlaid plot 3610 ; *************************************************** 3611 3612 lgres = True 3613 lgMonoDashIndex = False 3614 lgres@lgLabelFont = "helvetica" 3615 lgres@lgLabelFontHeightF = font_size_legend*10.0 3616 lgres@vpWidthF = 0.07 3617 lgres@vpHeightF = 0.08 3618 lgres@lgDashIndexes = (/0,1,2/) 3619 lbid = gsn_create_legend(wks,2,(/"km","kh"/),lgres) 3620 3621 amres = True 3622 amres@amParallelPosF = 0.88 3623 amres@amOrthogonalPosF = 0.365 3624 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3625 overlay(plot(n),plot_km) 3626 km=1 3627 else 3628 if (prof3d .EQ. 0)then 3629 varn=varn+1 3630 end if 3631 continue 3632 end if 3633 end if 3634 3635 if (vNam(varn) .EQ. "wpup" .OR. vNam(varn) .EQ. "wsus" .OR. \ 3636 vNam(varn) .EQ. "wu" .OR. vNam(varn) .EQ. "w"+dq+"u"+dq .OR. \ 3637 vNam(varn) .EQ. "w*u*") then 3638 if (wpup .EQ. 0) then 3639 res@gsnLeftString = "w"+dq+"u"+dq+", w*u* and wu" 3640 res@tiXAxisString = "("+unit(varn)+")" 3641 res@gsnRightString = " " 3642 if (xs .EQ. -1) then 3643 res@trXMinF = min((/miniwpup,miniwsus,miniwu/)) 3644 else 3645 res@trXMinF = xs 3646 end if 3647 if (xe .EQ. -1) then 3648 res@trXMaxF = max((/maxiwpup,maxiwsus,maxiwu/)) 3649 else 3650 res@trXMaxF = xe 3651 end if 3652 if (vNam(varn) .EQ. "wsus")then 3653 res@xyDashPattern = 1 3654 end if 3655 if (vNam(varn) .EQ. "wu")then 3656 res@xyDashPattern = 2 3657 end if 3658 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3659 3660 ; *************************************************** 3661 ; legend for overlaid plot 3662 ; *************************************************** 3663 3664 lgres = True 3665 lgMonoDashIndex = False 3666 lgres@lgLabelFont = "helvetica" 3667 lgres@lgLabelFontHeightF = font_size_legend*10.0 3668 lgres@vpWidthF = 0.08 3669 lgres@vpHeightF = 0.12 3670 lgres@lgDashIndexes = (/0,1,2/) 3671 lbid = gsn_create_legend(\ 3672 wks,3,(/"w"+dq+"u"+dq,"w*u*","wu"/),lgres) 3673 3674 amres = True 3675 amres@amParallelPosF = 0.88 3676 amres@amOrthogonalPosF = 0.33 3677 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3678 overlay(plot(n),plot_wpup) 3679 wpup=1 3680 else 3681 if (prof3d .EQ. 0)then 3682 varn=varn+1 3683 end if 3684 continue 3685 end if 3686 end if 3687 if (vNam(varn) .EQ. "wpvp" .OR. vNam(varn) .EQ. "wsvs" .OR. \ 3688 vNam(varn) .EQ. "wv" .OR. vNam(varn) .EQ. "w"+dq+"v"+dq .OR. \ 3689 vNam(varn) .EQ. "w*v*") then 3690 if (wpvp .EQ. 0) then 3691 res@gsnLeftString = "w"+dq+"v"+dq+", w*v* and wv" 3692 res@tiXAxisString = "("+unit(varn)+")" 3693 res@gsnRightString = " " 3694 if (xs .EQ. -1) then 3695 res@trXMinF = min((/miniwpvp,miniwsvs,miniwv/)) 3696 else 3697 res@trXMinF = xs 3698 end if 3699 if (xe .EQ. -1) then 3700 res@trXMaxF = max((/maxiwpvp,maxiwsvs,maxiwv/)) 3701 else 3702 res@trXMaxF = xe 3703 end if 3704 if (vNam(varn) .EQ. "wsvs")then 3705 res@xyDashPattern = 1 3706 end if 3707 if (vNam(varn) .EQ. "wv")then 3708 res@xyDashPattern = 2 3709 end if 3710 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3711 3712 ; *************************************************** 3713 ; legend for overlaid plot 3714 ; *************************************************** 3715 3716 lgres = True 3717 lgMonoDashIndex = False 3718 lgres@lgLabelFont = "helvetica" 3719 lgres@lgLabelFontHeightF = font_size_legend*10.0 3720 lgres@vpWidthF = 0.08 3721 lgres@vpHeightF = 0.12 3722 lgres@lgDashIndexes = (/0,1,2/) 3723 lbid = gsn_create_legend(\ 3724 wks,3,(/"w"+dq+"v"+dq,"w*v*","wv"/),lgres) 3725 3726 amres = True 3727 amres@amParallelPosF = 0.88 3728 amres@amOrthogonalPosF = 0.33 3729 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3730 overlay(plot(n),plot_wpvp) 3731 wpvp=1 3732 else 3733 if (prof3d .EQ. 0)then 3734 varn=varn+1 3735 end if 3736 continue 3737 end if 3738 end if 3739 if (vNam(varn) .EQ. "wpptp" .OR. vNam(varn) .EQ. "wspts" .OR. \ 3740 vNam(varn) .EQ. "wpt" .OR. vNam(varn) .EQ. "w"+dq+"pt"+dq .OR.\ 3741 vNam(varn) .EQ. "w*pt*") then 3742 if (wpptp .EQ. 0) then 3743 res@gsnLeftString = "w"+dq+"pt"+dq+", w*pt* and wpt" 3744 res@tiXAxisString = "("+unit(varn)+")" 3745 res@gsnRightString = " " 3746 if (xs .EQ. -1) then 3747 res@trXMinF = min((/miniwpptp,miniwspts,miniwpt/)) 3748 else 3749 res@trXMinF = xs 3750 end if 3751 if (xe .EQ. -1) then 3752 res@trXMaxF = max((/maxiwpptp,maxiwspts,maxiwpt/)) 3753 else 3754 res@trXMaxF = xe 3755 end if 3756 if (vNam(varn) .EQ. "wspts" .OR. vNam(varn) .EQ. "w*pt*")then 3757 res@xyDashPattern = 1 3758 end if 3759 if (vNam(varn) .EQ. "wpt")then 3760 res@xyDashPattern = 2 3761 end if 3762 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3763 3764 ; *************************************************** 3765 ; legend for overlaid plot 3766 ; *************************************************** 3767 3768 lgres = True 3769 lgMonoDashIndex = False 3770 lgres@lgLabelFont = "helvetica" 3771 lgres@lgLabelFontHeightF = font_size_legend*10.0 3772 lgres@vpWidthF = 0.09 3773 lgres@vpHeightF = 0.12 3774 lgres@lgDashIndexes = (/0,1,2/) 3775 lbid = gsn_create_legend(\ 3776 wks,3,(/"w"+dq+"pt"+dq,"w*pt*","wpt"/),lgres) 3777 3778 amres = True 3779 amres@amParallelPosF = 0.88 3780 amres@amOrthogonalPosF = 0.33 3781 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3782 overlay(plot(n),plot_wpptp) 3783 wpptp=1 3784 else 3785 if (prof3d .EQ. 0)then 3786 varn=varn+1 3787 end if 3788 continue 3789 end if 3790 end if 3791 if (vNam(varn) .EQ. "wsptsBC" .OR. vNam(varn) .EQ. "wptBC" .OR.\ 3792 vNam(varn) .EQ. "w*pt*BC") then 3793 if (wsptsBC .EQ. 0) then 3794 res@gsnLeftString = "w*pt*BC and wptBC" 3795 res@tiXAxisString = "("+unit(varn)+")" 3796 res@gsnRightString = " " 3797 if (xs .EQ. -1) then 3798 res@trXMinF = min((/miniwsptsBC,miniwptBC/)) 3799 else 3800 res@trXMinF = xs 3801 end if 3802 if (xe .EQ. -1) then 3803 res@trXMaxF = max((/maxiwsptsBC,maxiwptBC/)) 3804 else 3805 res@trXMaxF = xe 3806 end if 3807 if (vNam(varn) .EQ. "wptBC")then 3808 res@xyDashPattern = 1 3809 end if 3810 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3811 3812 ; *************************************************** 3813 ; legend for overlaid plot 3814 ; *************************************************** 3815 3816 lgres = True 3817 lgMonoDashIndex = False 3818 lgres@lgLabelFont = "helvetica" 3819 lgres@lgLabelFontHeightF = font_size_legend*10.0 3820 lgres@vpWidthF = 0.1 3821 lgres@vpHeightF = 0.12 3822 lgres@lgDashIndexes = (/0,1,2/) 3823 lbid = gsn_create_legend(\ 3824 wks,3,(/"w*pt*BC","wptBC"/),lgres) 3825 3826 amres = True 3827 amres@amParallelPosF = 0.88 3828 amres@amOrthogonalPosF = 0.33 3829 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3830 overlay(plot(n),plot_wsptsBC) 3831 wsptsBC=1 3832 else 3833 if (prof3d .EQ. 0)then 3834 varn=varn+1 3835 end if 3836 continue 3837 end if 3838 end if 3839 if (vNam(varn) .EQ. "wpvptp" .OR. vNam(varn) .EQ. "wsvpts" .OR. \ 3840 vNam(varn) .EQ. "wvpt" .OR. vNam(varn) .EQ. \ 3841 "w"+dq+"vpt"+dq .OR. vNam(varn) .EQ. "w*vpt*") then 3842 if (wpvptp .EQ. 0) then 3843 res@gsnLeftString = "w"+dq+"vpt"+dq+", w*vpt* and wvpt" 3844 res@tiXAxisString = "("+unit(varn)+")" 3845 res@gsnRightString = " " 3846 if (xs .EQ. -1) then 3847 res@trXMinF = min((/miniwpvptp,miniwsvpts,miniwvpt/)) 3848 else 3849 res@trXMinF = xs 3850 end if 3851 if (xe .EQ. -1) then 3852 res@trXMaxF = max((/maxiwpvptp,maxiwsvpts,maxiwvpt/)) 3853 else 3854 res@trXMaxF = xe 3855 end if 3856 if (vNam(varn) .EQ. "wsvpts")then 3857 res@xyDashPattern = 1 3858 end if 3859 if (vNam(varn) .EQ. "wvpt")then 3860 res@xyDashPattern = 2 3861 end if 3862 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3863 3864 ; *************************************************** 3865 ; legend for overlaid plot 3866 ; *************************************************** 3867 3868 lgres = True 3869 lgMonoDashIndex = False 3870 lgres@lgLabelFont = "helvetica" 3871 lgres@lgLabelFontHeightF = font_size_legend*10.0 3872 lgres@vpWidthF = 0.1 3873 lgres@vpHeightF = 0.12 3874 lgres@lgDashIndexes = (/0,1,2/) 3875 lbid = gsn_create_legend(\ 3876 wks,3,(/"w"+dq+"vpt"+dq,"w*vpt*","wvpt"/),lgres) 3877 amres = True 3878 amres@amParallelPosF = 0.88 3879 amres@amOrthogonalPosF = 0.33 3880 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3881 overlay(plot(n),plot_wpvptp) 3882 wpvptp=1 3883 else 3884 if (prof3d .EQ. 0)then 3885 varn=varn+1 3886 end if 3887 continue 3888 end if 3889 end if 3890 if (vNam(varn) .EQ. "wpqp" .OR. vNam(varn) .EQ. "wsqs" .OR. \ 3891 vNam(varn) .EQ. "wq" .OR. vNam(varn) .EQ. "w"+dq+"q"+dq .OR. \ 3892 vNam(varn) .EQ. "w*q*") then 3893 if (wpqp .EQ. 0) then 3894 res@gsnLeftString = "w"+dq+"q"+dq+", w*q* and wq" 3895 res@tiXAxisString = "("+unit(varn)+")" 3896 res@gsnRightString = " " 3897 if (xs .EQ. -1) then 3898 res@trXMinF = min((/miniwpqp,miniwsqs,miniwq/)) 3899 else 3900 res@trXMinF = xs 3901 end if 3902 if (xe .EQ. -1) then 3903 res@trXMaxF = max((/maxiwpqp,maxiwsqs,maxiwq/)) 3904 else 3905 res@trXMaxF = xe 3906 end if 3907 if (vNam(varn) .EQ. "wsqs")then 3908 res@xyDashPattern = 1 3909 end if 3910 if (vNam(varn) .EQ. "wq")then 3911 res@xyDashPattern = 2 3912 end if 3913 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3914 3915 ; *************************************************** 3916 ; legend for overlaid plot 3917 ; *************************************************** 3918 3919 lgres = True 3920 lgMonoDashIndex = False 3921 lgres@lgLabelFont = "helvetica" 3922 lgres@lgLabelFontHeightF = font_size_legend*10.0 3923 lgres@vpWidthF = 0.08 3924 lgres@vpHeightF = 0.12 3925 lgres@lgDashIndexes = (/0,1,2/) 3926 lbid = gsn_create_legend(\ 3927 wks,3,(/"w"+dq+"q"+dq,"w*q*","wq"/),lgres) 3928 3929 amres = True 3930 amres@amParallelPosF = 0.88 3931 amres@amOrthogonalPosF = 0.33 3932 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3933 overlay(plot(n),plot_wpqp) 3934 wpqp=1 3935 else 3936 if (prof3d .EQ. 0)then 3937 varn=varn+1 3938 end if 3939 continue 3940 end if 3941 end if 3942 if (vNam(varn) .EQ. "wpqvp" .OR. vNam(varn) .EQ. "wsqvs" .OR. \ 3943 vNam(varn) .EQ. "wqv" .OR. vNam(varn) .EQ. "w"+dq+"qv"+dq .OR.\ 3944 vNam(varn) .EQ. "w*qv*") then 3945 if (wpqvp .EQ. 0) then 3946 res@gsnLeftString ="w"+dq+"qv"+dq+" , w*qv* and wqv" 3947 res@tiXAxisString = "("+unit(varn)+")" 3948 res@gsnRightString = " " 3949 if (xs .EQ. -1) then 3950 res@trXMinF = min((/miniwpqp,miniwsqvs,miniwqv/)) 3951 else 3952 res@trXMinF = xs 3953 end if 3954 if (xe .EQ. -1) then 3955 res@trXMaxF = max((/maxiwpqp,maxiwsqvs,maxiwqv/)) 3956 else 3957 res@trXMaxF = xe 3958 end if 3959 if (vNam(varn) .EQ. "wsqvs")then 3960 res@xyDashPattern = 1 3961 end if 3962 if (vNam(varn) .EQ. "wqv")then 3963 res@xyDashPattern = 2 3964 end if 3965 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3966 3967 ; *************************************************** 3968 ; legend for overlaid plot 3969 ; *************************************************** 3970 3971 lgres = True 3972 lgMonoDashIndex = False 3973 lgres@lgLabelFont = "helvetica" 3974 lgres@lgLabelFontHeightF = font_size_legend*10.0 3975 lgres@vpWidthF = 0.09 3976 lgres@vpHeightF = 0.12 3977 lgres@lgDashIndexes = (/0,1,2/) 3978 lbid = gsn_create_legend(\ 3979 wks,3,(/"w"+dq+"qv"+dq,"w*qv*","wqv"/),lgres) 3980 3981 amres = True 3982 amres@amParallelPosF = 0.88 3983 amres@amOrthogonalPosF = 0.33 3984 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3985 overlay(plot(n),plot_wpqvp) 3986 wpqvp=1 3987 else 3988 if (prof3d .EQ. 0)then 3989 varn=varn+1 3990 end if 3991 continue 3992 end if 3993 end if 3994 if (vNam(varn) .EQ. "wpsp" .OR. vNam(varn) .EQ. "wsss" .OR. \ 3995 vNam(varn) .EQ. "ws" .OR. vNam(varn) .EQ. "w"+dq+"s"+dq .OR.\ 3996 vNam(varn) .EQ. "w*s*") then 3997 if (wpsp .EQ. 0) then 3998 res@gsnLeftString = "w"+dq+"s"+dq+", w*s* and ws" 3999 res@tiXAxisString = "("+unit(varn)+")" 4000 res@gsnRightString = " " 4001 if (xs .EQ. -1) then 4002 res@trXMinF = min((/miniwpsp,miniwsss,miniws/)) 4003 else 4004 res@trXMinF = xs 4005 end if 4006 if (xe .EQ. -1) then 4007 res@trXMaxF = max((/maxiwpsp,maxiwsss,maxiws/)) 4008 else 4009 res@trXMaxF = xe 4010 end if 4011 if (vNam(varn) .EQ. "wsss")then 4012 res@xyDashPattern = 1 4013 end if 4014 if (vNam(varn) .EQ. "ws")then 4015 res@xyDashPattern = 2 4016 end if 4017 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 4018 4019 ; *************************************************** 4020 ; legend for overlaid plot 4021 ; *************************************************** 4022 4023 lgres = True 4024 lgMonoDashIndex = False 4025 lgres@lgLabelFont = "helvetica" 4026 lgres@lgLabelFontHeightF = font_size_legend*10.0 4027 lgres@vpWidthF = 0.08 4028 lgres@vpHeightF = 0.12 4029 lgres@lgDashIndexes = (/0,1,2/) 4030 lbid = gsn_create_legend(\ 4031 wks,3,(/"w"+dq+"s"+dq,"w*s*","ws"/),lgres) 4032 4033 amres = True 4034 amres@amParallelPosF = 0.88 4035 amres@amOrthogonalPosF = 0.33 4036 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 4037 overlay(plot(n),plot_wpsp) 4038 wpsp=1 4039 else 4040 if (prof3d .EQ. 0)then 4041 varn=varn+1 4042 end if 4043 continue 4044 end if 4045 end if 4046 if (vNam(varn) .EQ. "wpsap" .OR.vNam(varn) .EQ. "wssas" .OR. \ 4047 vNam(varn) .EQ. "wsa" .OR. vNam(varn) .EQ. "w"+dq+"sa"+dq .OR.\ 4048 vNam(varn) .EQ. "w*sa*") then 4049 if (wpsap .EQ. 0) then 4050 res@gsnLeftString = "w"+dq+"sa"+dq+", w*sa* and wsa" 4051 res@tiXAxisString = "("+unit(varn)+")" 4052 res@gsnRightString = " " 4053 if (xs .EQ. -1) then 4054 res@trXMinF = min((/miniwpsap,miniwssas,miniwsa/)) 4055 else 4056 res@trXMinF = xs 4057 end if 4058 if (xe .EQ. -1) then 4059 res@trXMaxF = max((/maxiwpsap,maxiwssas,maxiwsa/)) 4060 else 4061 res@trXMaxF = xe 4062 end if 4063 if (vNam(varn) .EQ. "wssas")then 4064 res@xyDashPattern = 1 4065 end if 4066 if (vNam(varn) .EQ. "wsa")then 4067 res@xyDashPattern = 2 4068 end if 4069 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 4070 4071 ; *************************************************** 4072 ; legend for overlaid plot 4073 ; *************************************************** 4074 4075 lgres = True 4076 lgMonoDashIndex = False 4077 lgres@lgLabelFont = "helvetica" 4078 lgres@lgLabelFontHeightF = font_size_legend*10.0 4079 lgres@vpWidthF = 0.09 4080 lgres@vpHeightF = 0.12 4081 lgres@lgDashIndexes = (/0,1,2/) 4082 lbid = gsn_create_legend(\ 4083 wks,3,(/"w"+dq+"sa"+dq,"w*sa*","wsa"/),lgres) 4084 amres = True 4085 amres@amParallelPosF = 0.88 4086 amres@amOrthogonalPosF = 0.33 4087 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 4088 overlay(plot(n),plot_wpsap) 4089 wpsap=1 4090 else 4091 if (prof3d .EQ. 0)then 4092 varn=varn+1 4093 end if 4094 continue 4095 end if 4096 end if 4097 4098 if (vNam(varn) .EQ. "us2" .OR. vNam(varn) .EQ. "vs2" .OR. \ 4099 vNam(varn) .EQ. "ws2" .OR. vNam(varn) .EQ. "u*2" .OR. \ 4100 vNam(varn) .EQ. "v*2" .OR. vNam(varn) .EQ. "w*2" ) then 4101 if (us2 .EQ. 0) then 4102 res@gsnLeftString = "u*2, v*2 and w*2" 4103 res@tiXAxisString = "("+unit(varn)+")" 4104 res@gsnRightString = " " 4105 if (xs .EQ. -1) then 4106 res@trXMinF = min((/minius2,minivs2,miniws2/)) 4107 else 4108 res@trXMinF = xs 4109 end if 4110 if (xe .EQ. -1) then 4111 res@trXMaxF = max((/maxius2,maxivs2,maxiws2/)) 4112 else 4113 res@trXMaxF = xe 4114 end if 4115 if (vNam(varn) .EQ. "vs2")then 4116 res@xyDashPattern = 1 4117 end if 4118 if (vNam(varn) .EQ. "ws2")then 4119 res@xyDashPattern = 2 4120 end if 4121 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 4122 4123 ; *************************************************** 4124 ; legend for overlaid plot 4125 ; *************************************************** 4126 4127 lgres = True 4128 lgMonoDashIndex = False 4129 lgres@lgLabelFont = "helvetica" 4130 lgres@lgLabelFontHeightF = font_size_legend*10.0 4131 lgres@vpWidthF = 0.07 4132 lgres@vpHeightF = 0.12 4133 lgres@lgDashIndexes = (/0,1,2/) 4134 lbid = gsn_create_legend(wks,3,(/"u*2","v*2","w*2"/),lgres) 4135 amres = True 4136 amres@amParallelPosF = 0.88 4137 amres@amOrthogonalPosF = 0.33 4138 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 4139 overlay(plot(n),plot_us2) 4140 us2=1 4141 else 4142 if (prof3d .EQ. 0)then 4143 varn=varn+1 4144 end if 4145 continue 4146 end if 4147 end if 4148 4149 if (vNam(varn) .EQ. "wsususodz" .OR. \ 4150 vNam(varn) .EQ. "wspsodz" .OR. \ 4151 vNam(varn) .EQ. "wpeodz" .OR. \ 4152 vNam(varn) .EQ. "w*u*u*:dz" .OR. \ 4153 vNam(varn) .EQ. "w*p*:dz" .OR. \ 4154 vNam(varn) .EQ. "w"+dq+"e:dz") then 4155 if (wsususodz .EQ. 0) then 4156 res@gsnLeftString = "w*u*u*:dz, w*p*:dz and w"+dq+"e:dz" 4157 res@tiXAxisString = "("+unit(varn)+")" 4158 res@gsnRightString = " " 4159 if (xs .EQ. -1) then 4160 res@trXMinF = min((/miniwsususodz,\ 4161 miniwspsodz,miniwpeodz/)) 4162 else 4163 res@trXMinF = xs 4164 end if 4165 if (xe .EQ. -1) then 4166 res@trXMaxF = max((/maxiwsususodz,maxiwspsodz,\ 4167 maxiwpeodz/)) 4168 else 4169 res@trXMaxF = xe 4170 end if 4171 if (vNam(varn) .EQ. "wspsodz")then 4172 res@xyDashPattern = 1 4173 end if 4174 if (vNam(varn) .EQ. "wpeodz")then 4175 res@xyDashPattern = 2 4176 end if 4177 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 4178 4179 ; *************************************************** 4180 ; legend for overlaid plot 4181 ; *************************************************** 4182 4183 lgres = True 4184 lgMonoDashIndex = False 4185 lgres@lgLabelFont = "helvetica" 4186 lgres@lgLabelFontHeightF = font_size_legend*10.0 4187 lgres@vpWidthF = 0.12 4188 lgres@vpHeightF = 0.12 4189 lgres@lgDashIndexes = (/0,1,2/) 4190 lbid = gsn_create_legend(\ 4191 wks,3,(/"w*u*u*:dz","w*p*:dz","w"+dq+"e:dz"/),lgres) 4192 amres = True 4193 amres@amParallelPosF = 0.88 4194 amres@amOrthogonalPosF = 0.33 4195 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 4196 overlay(plot(n),plot_wsususodz) 4197 wsususodz=1 4198 else 4199 if (prof3d .EQ. 0)then 4200 varn=varn+1 4201 end if 4202 continue 4203 end if 4204 end if 4205 n=n+1 4206 if (prof3d .EQ. 0)then 4207 varn=varn+1 4208 end if 4209 end if 4210 end do 4211 end if 4212 4213 com_var_avail=new(count_var,string) 4214 4215 if (combine .EQ. 1) then 4216 co=0 4217 n_o=0 4218 do varn = 0,dim-1 4219 4220 check = True 4221 4222 if (prof3d .EQ. 0) then 4223 if ( isStrSubset( vNam(varn), "time") .OR. \ 4224 isStrSubset( vNam(varn), "NORM")) then 4225 check = False 4226 end if 4227 else 4228 if ( isStrSubset( vNam(varn), "time") .OR. \ 4229 isStrSubset( vNam(varn), "zusi") .OR. \ 4230 isStrSubset( vNam(varn), "zwwi") .OR. \ 4231 isStrSubset( vNam(varn), "x") .OR. \ 4232 isStrSubset( vNam(varn), "xu") .OR. \ 4233 isStrSubset( vNam(varn), "y") .OR. \ 4234 isStrSubset( vNam(varn), "yv") .OR. \ 4235 isStrSubset( vNam(varn), "zu_3d") .OR. \ 4236 isStrSubset( vNam(varn), "zw_3d")) then 4237 check = False 4238 end if 4239 end if 4240 4241 if (var .NE. "all") then 4242 check = isStrSubset( var,","+vNam(varn)+"," ) 4243 end if 4244 4245 if (check)then 4246 4247 if (prof3d .EQ. 0) then 4248 if (log_z .EQ. 1) then 4249 z = f_att->$vNam(varn+1)$(1:dimz-1) 4250 else 4251 z = f_att->$vNam(varn+1)$ 4252 end if 4253 else 4254 do i=0,b-1 4255 if (isStrSubset( a(i),"zu_3d" ))then 4256 z_v(varn,:) = z_u 4257 if (log_z .EQ. 1) then 4258 z = z_v(varn,1:dimz-1) 4259 else 4260 z = z_v(varn,:) 4261 end if 4262 else 4263 if (isStrSubset( a(i),"zw_3d" ))then 4264 z_v(varn,:) = z_w 4265 if (log_z .EQ. 1) then 4266 z = z_v(varn,1:dimz-1) 4267 else 4268 z = z_v(varn,:) 4269 end if 4270 end if 4271 end if 4272 end do 4273 end if 4274 4275 z=z/norm_z 4276 4277 com_var_avail(n_o)=vNam(varn) 4278 4279 com=isStrSubset( c_var,","+vNam(varn)+"," ) 4280 if (com)then 4281 co = co+1 4282 if (n_o .EQ. 1) then 4283 res@xyDashPattern = 1 4284 else 4285 if (n_o .EQ. 2) then 4286 res@xyDashPattern = 2 4287 else 4288 res@xyDashPattern = 0 4289 res@gsnLeftString = "Combined Plot of "+c_var 4290 res@tiXAxisString = "("+unit(varn)+")" 4291 res@gsnRightString = " " 4292 if (xs .EQ. -1) then 4293 res@trXMinF = min(mini) 4294 else 4295 res@trXMinF = xs 4296 end if 4297 if (xe .EQ. -1) then 4298 res@trXMaxF = max(maxi) 4299 else 4300 res@trXMaxF = xe 4301 end if 4302 end if 4303 end if 4304 label(n_o)=vNam(varn) 4305 color_o(n_o)=237 4306 plot_o(n_o)=gsn_csm_xy(wks,data(varn,:,:),z,res) 4307 n_o=n_o+1 4308 end if 4309 if (prof3d .EQ. 0)then 4310 varn=varn+1 4311 end if 4312 end if 4313 end do 4314 4315 if(number_comb .EQ. 2)then 4316 if (co .EQ. 2)then 4317 overlay(plot_o(0),plot_o(1)) 4318 else 4319 print(" ") 4320 print("combining is not possible,") 4321 print("'c_var'(= "+c_var+") must include two variables of "+\ 4322 "the general plots = ") 4323 print("- "+com_var_avail) 4324 print("be sure to have one comma before and after the variable") 4325 print(" ") 4326 exit 4327 end if 4328 end if 4329 if(number_comb .EQ. 3)then 4330 if (co .EQ. 3)then 4331 overlay(plot_o(0),plot_o(1)) 4332 overlay(plot_o(0),plot_o(2)) 4333 else 4334 print(" ") 4335 print("combining is not possible,") 4336 print("'c_var'(= "+c_var+") must include three variables of "+\ 4337 "the general plots = ") 4338 print("- "+com_var_avail) 4339 print("be sure to have one comma before and after the variable") 4340 print(" ") 4341 exit 4342 end if 4343 end if 1602 end if 1603 end if 1604 1605 end if 1606 ;-------above steps only for first file 4344 1607 4345 1608 ; *************************************************** 4346 ; legend for combined plot1609 ; indicate plot number 4347 1610 ; *************************************************** 4348 1611 4349 lgres = True 4350 lgMonoDashIndex = False 4351 lgres@lgDashIndexes = (/0,1,2/) 4352 lgres@lgLabelFont = "helvetica" 4353 lgres@lgLabelFontHeightF = font_size_legend*10.0 4354 lgres@vpWidthF = 0.12 4355 lgres@vpHeightF = 0.1 4356 4357 lbid = gsn_create_legend(wks,number_comb,label,lgres) 4358 4359 amres = True 4360 amres@amParallelPosF = 0.65 4361 amres@amOrthogonalPosF = -0.2 4362 annoid1 = gsn_add_annotation(plot_o(0),lbid,amres) 1612 if (combine .EQ. 1) then 1613 n = 1 1614 else 1615 n = 0 1616 end if 1617 1618 if (over .EQ. 1) then 1619 plot_u = gsn_csm_xy(wks,t,data_0(:,:),res) 1620 plot_v = gsn_csm_xy(wks,t,data_0(:,:),res) 1621 plot_w = gsn_csm_xy(wks,t,data_0(:,:),res) 1622 plot_pt = gsn_csm_xy(wks,t,data_0(:,:),res) 1623 plot_vpt = gsn_csm_xy(wks,t,data_0(:,:),res) 1624 plot_lpt = gsn_csm_xy(wks,t,data_0(:,:),res) 1625 plot_q = gsn_csm_xy(wks,t,data_0(:,:),res) 1626 plot_qv = gsn_csm_xy(wks,t,data_0(:,:),res) 1627 plot_ql = gsn_csm_xy(wks,t,data_0(:,:),res) 1628 plot_rho = gsn_csm_xy(wks,t,data_0(:,:),res) 1629 plot_s = gsn_csm_xy(wks,t,data_0(:,:),res) 1630 plot_sa = gsn_csm_xy(wks,t,data_0(:,:),res) 1631 plot_e = gsn_csm_xy(wks,t,data_0(:,:),res) 1632 plot_es = gsn_csm_xy(wks,t,data_0(:,:),res) 1633 plot_km = gsn_csm_xy(wks,t,data_0(:,:),res) 1634 plot_kh = gsn_csm_xy(wks,t,data_0(:,:),res) 1635 plot_l = gsn_csm_xy(wks,t,data_0(:,:),res) 1636 plot_wpup = gsn_csm_xy(wks,t,data_0(:,:),res) 1637 plot_wsus = gsn_csm_xy(wks,t,data_0(:,:),res) 1638 plot_wu = gsn_csm_xy(wks,t,data_0(:,:),res) 1639 plot_wpvp = gsn_csm_xy(wks,t,data_0(:,:),res) 1640 plot_wsvs = gsn_csm_xy(wks,t,data_0(:,:),res) 1641 plot_wv = gsn_csm_xy(wks,t,data_0(:,:),res) 1642 plot_wpptp = gsn_csm_xy(wks,t,data_0(:,:),res) 1643 plot_wspts = gsn_csm_xy(wks,t,data_0(:,:),res) 1644 plot_wpt = gsn_csm_xy(wks,t,data_0(:,:),res) 1645 plot_wsptsBC = gsn_csm_xy(wks,t,data_0(:,:),res) 1646 plot_wptBC = gsn_csm_xy(wks,t,data_0(:,:),res) 1647 plot_wpvptp = gsn_csm_xy(wks,t,data_0(:,:),res) 1648 plot_wsvpts = gsn_csm_xy(wks,t,data_0(:,:),res) 1649 plot_wvpt = gsn_csm_xy(wks,t,data_0(:,:),res) 1650 plot_wpqp = gsn_csm_xy(wks,t,data_0(:,:),res) 1651 plot_wsqs = gsn_csm_xy(wks,t,data_0(:,:),res) 1652 plot_wq = gsn_csm_xy(wks,t,data_0(:,:),res) 1653 plot_wpqvp = gsn_csm_xy(wks,t,data_0(:,:),res) 1654 plot_wsqvs = gsn_csm_xy(wks,t,data_0(:,:),res) 1655 plot_wqv = gsn_csm_xy(wks,t,data_0(:,:),res) 1656 plot_wpsp = gsn_csm_xy(wks,t,data_0(:,:),res) 1657 plot_wsss = gsn_csm_xy(wks,t,data_0(:,:),res) 1658 plot_ws = gsn_csm_xy(wks,t,data_0(:,:),res) 1659 plot_wpsap = gsn_csm_xy(wks,t,data_0(:,:),res) 1660 plot_wssas = gsn_csm_xy(wks,t,data_0(:,:),res) 1661 plot_wsa = gsn_csm_xy(wks,t,data_0(:,:),res) 1662 plot_wses = gsn_csm_xy(wks,t,data_0(:,:),res) 1663 plot_us2 = gsn_csm_xy(wks,t,data_0(:,:),res) 1664 plot_vs2 = gsn_csm_xy(wks,t,data_0(:,:),res) 1665 plot_ws2 = gsn_csm_xy(wks,t,data_0(:,:),res) 1666 plot_pts2 = gsn_csm_xy(wks,t,data_0(:,:),res) 1667 plot_ws3 = gsn_csm_xy(wks,t,data_0(:,:),res) 1668 plot_Sw = gsn_csm_xy(wks,t,data_0(:,:),res) 1669 plot_ws2pts = gsn_csm_xy(wks,t,data_0(:,:),res) 1670 plot_wspts2 = gsn_csm_xy(wks,t,data_0(:,:),res) 1671 plot_wsususodz = gsn_csm_xy(wks,t,data_0(:,:),res) 1672 plot_wspsodz = gsn_csm_xy(wks,t,data_0(:,:),res) 1673 plot_wpeodz = gsn_csm_xy(wks,t,data_0(:,:),res) 1674 1675 if (check_vType) then 1676 miniu = 100000.d 1677 maxiu = -100000.d 1678 miniv = 100000.d 1679 maxiv = -100000.d 1680 miniw = 100000.d 1681 maxiw = -100000.d 1682 minipt = 100000.d 1683 maxipt = -100000.d 1684 minivpt = 100000.d 1685 maxivpt = -100000.d 1686 minilpt = 100000.d 1687 maxilpt = -100000.d 1688 miniq = 100000.d 1689 maxiq = -100000.d 1690 miniqv = 100000.d 1691 maxiqv = -100000.d 1692 miniql = 100000.d 1693 maxiql = -100000.d 1694 minie = 100000.d 1695 maxie = -100000.d 1696 minies = 100000.d 1697 maxies = -100000.d 1698 minikm = 100000.d 1699 maxikm = -100000.d 1700 minikh = 100000.d 1701 maxikh = -100000.d 1702 miniwpup = 100000.d 1703 maxiwpup = -100000.d 1704 miniwsus = 100000.d 1705 maxiwsus = -100000.d 1706 miniwu = 100000.d 1707 maxiwu = -100000.d 1708 miniwpvp = 100000.d 1709 maxiwpvp = -100000.d 1710 miniwsvs = 100000.d 1711 maxiwsvs = -100000.d 1712 miniwv = 100000.d 1713 maxiwv = -100000.d 1714 miniwpptp = 100000.d 1715 maxiwpptp = -100000.d 1716 miniwspts = 100000.d 1717 maxiwspts = -100000.d 1718 miniwpt = 100000.d 1719 maxiwpt = -100000.d 1720 miniwsptsBC = 100000.d 1721 maxiwsptsBC = -100000.d 1722 miniwptBC = 100000.d 1723 maxiwptBC = -100000.d 1724 miniwpvptp = 100000.d 1725 maxiwpvptp = -100000.d 1726 miniwsvpts = 100000.d 1727 maxiwsvpts = -100000.d 1728 miniwvpt = 100000.d 1729 maxiwvpt = -100000.d 1730 miniwpqp = 100000.d 1731 maxiwpqp = -100000.d 1732 miniwsqs = 100000.d 1733 maxiwsqs = -100000.d 1734 miniwq = 100000.d 1735 maxiwq = -100000.d 1736 miniwpqvp = 100000.d 1737 maxiwpqvp = -100000.d 1738 miniwsqvs = 100000.d 1739 maxiwsqvs = -100000.d 1740 miniwqv = 100000.d 1741 maxiwqv = -100000.d 1742 miniwpsp = 100000.d 1743 maxiwpsp = -100000.d 1744 miniwsss = 100000.d 1745 maxiwsss = -100000.d 1746 miniws = 100000.d 1747 maxiws = -100000.d 1748 miniwpsap = 100000.d 1749 maxiwpsap = -100000.d 1750 miniwssas = 100000.d 1751 maxiwssas = -100000.d 1752 miniwsa = 100000.d 1753 maxiwsa = -100000.d 1754 minius2 = 100000.d 1755 maxius2 = -100000.d 1756 minivs2 = 100000.d 1757 maxivs2 = -100000.d 1758 miniws2 = 100000.d 1759 maxiws2 = -100000.d 1760 miniwsususodz = 100000.d 1761 maxiwsususodz = -100000.d 1762 miniwspsodz = 100000.d 1763 maxiwspsodz = -100000.d 1764 miniwpeodz = 100000.d 1765 maxiwpeodz = -100000.d 1766 else 1767 miniu = 100000. 1768 maxiu = -100000. 1769 miniv = 100000. 1770 maxiv = -100000. 1771 miniw = 100000. 1772 maxiw = -100000. 1773 minipt = 100000. 1774 maxipt = -100000. 1775 minivpt = 100000. 1776 maxivpt = -100000. 1777 minilpt = 100000. 1778 maxilpt = -100000. 1779 miniq = 100000. 1780 maxiq = -100000. 1781 miniqv = 100000. 1782 maxiqv = -100000. 1783 miniql = 100000. 1784 maxiql = -100000. 1785 minie = 100000. 1786 maxie = -100000. 1787 minies = 100000. 1788 maxies = -100000. 1789 minikm = 100000. 1790 maxikm = -100000. 1791 minikh = 100000. 1792 maxikh = -100000. 1793 miniwpup = 100000. 1794 maxiwpup = -100000. 1795 miniwsus = 100000. 1796 maxiwsus = -100000. 1797 miniwu = 100000. 1798 maxiwu = -100000. 1799 miniwpvp = 100000. 1800 maxiwpvp = -100000. 1801 miniwsvs = 100000. 1802 maxiwsvs = -100000. 1803 miniwv = 100000. 1804 maxiwv = -100000. 1805 miniwpptp = 100000. 1806 maxiwpptp = -100000. 1807 miniwspts = 100000. 1808 maxiwspts = -100000. 1809 miniwpt = 100000. 1810 maxiwpt = -100000. 1811 miniwsptsBC = 100000. 1812 maxiwsptsBC = -100000. 1813 miniwptBC = 100000. 1814 maxiwptBC = -100000. 1815 miniwpvptp = 100000. 1816 maxiwpvptp = -100000. 1817 miniwsvpts = 100000. 1818 maxiwsvpts = -100000. 1819 miniwvpt = 100000. 1820 maxiwvpt = -100000. 1821 miniwpqp = 100000. 1822 maxiwpqp = -100000. 1823 miniwsqs = 100000. 1824 maxiwsqs = -100000. 1825 miniwq = 100000. 1826 maxiwq = -100000. 1827 miniwpqvp = 100000. 1828 maxiwpqvp = -100000. 1829 miniwsqvs = 100000. 1830 maxiwsqvs = -100000. 1831 miniwqv = 100000. 1832 maxiwqv = -100000. 1833 miniwpsp = 100000. 1834 maxiwpsp = -100000. 1835 miniwsss = 100000. 1836 maxiwsss = -100000. 1837 miniws = 100000. 1838 maxiws = -100000. 1839 miniwpsap = 100000. 1840 maxiwpsap = -100000. 1841 miniwssas = 100000. 1842 maxiwssas = -100000. 1843 miniwsa = 100000. 1844 maxiwsa = -100000. 1845 minius2 = 100000. 1846 maxius2 = -100000. 1847 minivs2 = 100000. 1848 maxivs2 = -100000. 1849 miniws2 = 100000. 1850 maxiws2 = -100000. 1851 miniwsususodz = 100000. 1852 maxiwsususodz = -100000. 1853 miniwspsodz = 100000. 1854 maxiwspsodz = -100000. 1855 miniwpeodz = 100000. 1856 maxiwpeodz = -100000. 1857 end if 1858 1859 end if 1860 1861 if (prof3d .EQ. 1)then 1862 1863 if (end_x .EQ. -1) then 1864 end_x=dimx-2 1865 end if 1866 if (end_y .EQ. -1)then 1867 end_y=dimy-2 1868 end if 1869 if (start_x .LT. 0)then 1870 print(" ") 1871 print("'start_x' is lower than 0 and set to 0") 1872 print(" ") 1873 start_x=0 1874 end if 1875 if (start_x .GT. dimx-1)then 1876 print(" ") 1877 print("'start_x' is greater than available x-range and set to "+\ 1878 "maximum of x-range (excluding ghostpoint)") 1879 print(" ") 1880 start_x=dimx-2 1881 end if 1882 if (end_x .EQ. dimx-1)then 1883 print(" ") 1884 print("'end_x' = "+end_x+" and includes the ghostpoint") 1885 print(" ") 1886 end if 1887 if (end_x .GT. dimx-1)then 1888 print(" ") 1889 print("'end_x' = "+end_x+" is greater than available x-range and set "+\ 1890 "to maximum of x-range (excluding ghostpoint)") 1891 print(" ") 1892 end_x=dimx-2 1893 end if 1894 if (end_x .LT. start_x)then 1895 print(" ") 1896 print("'end_x' = "+end_x+" is lower than 'start_x' = "+start_x+\ 1897 " and set to maximum of x-range (excluding ghostpoint)") 1898 print(" ") 1899 end_x=dimx-2 1900 end if 1901 if (start_y .LT. 0)then 1902 print(" ") 1903 print("'start_y' is lower than 0 and set to 0") 1904 print(" ") 1905 start_y=0 1906 end if 1907 if (start_y .GT. dimy-1)then 1908 print(" ") 1909 print("'start_y' is greater than available y-range and set to "+\ 1910 "maximum of y-range (excluding ghostpoint)") 1911 print(" ") 1912 start_x=dimy-2 1913 end if 1914 if (end_y .EQ. dimy-1)then 1915 print(" ") 1916 print("'end_y' = "+end_y+" and includes the ghostpoint") 1917 print(" ") 1918 end if 1919 if (end_y .GT. dimy-1)then 1920 print(" ") 1921 print("'end_y' = "+end_y+" is greater than available y-range and "+\ 1922 "set to maximum of y-range (excluding ghostpoint)") 1923 print(" ") 1924 end_x=dimy-2 1925 end if 1926 if (end_y .LT. start_y)then 1927 print(" ") 1928 print("'end_y' = "+end_y+" is lower than 'start_y' = "+start_y+\ 1929 " and set to maximum of y-range (excluding ghostpoint)") 1930 print(" ") 1931 end_y=dimy-2 1932 end if 1933 1934 end if 1935 1936 n_o=0 1937 count_var=0 1938 1939 res@xyDashPattern = 1*nof 1940 1941 over_remind = False 1942 if ( over .eq. 1)then 1943 over_remind = True 1944 end if 1945 1946 do varn = 0,dim-1 1947 1948 check = True 1949 1950 if (prof3d .EQ. 0) then 1951 if ( isStrSubset( vNam(varn), "time") .OR. \ 1952 isStrSubset( vNam(varn), "NORM")) then 1953 check = False 1954 end if 1955 else 1956 if ( isStrSubset( vNam(varn), "time") .OR. \ 1957 isStrSubset( vNam(varn), "zusi") .OR. \ 1958 isStrSubset( vNam(varn), "zwwi") .OR. \ 1959 isStrSubset( vNam(varn), "x") .OR. \ 1960 isStrSubset( vNam(varn), "xu") .OR. \ 1961 isStrSubset( vNam(varn), "y") .OR. \ 1962 isStrSubset( vNam(varn), "yv") .OR. \ 1963 isStrSubset( vNam(varn), "zu_3d") .OR. \ 1964 isStrSubset( vNam(varn), "zw_3d")) then 1965 check = False 1966 end if 1967 end if 1968 1969 if (var .NE. "all") then 1970 check = isStrSubset( var,","+vNam(varn)+"," ) 1971 end if 1972 1973 if (combine .EQ. 1) then 1974 com=isStrSubset(c_var,","+vNam(varn)+"," ) 1975 if (com) then 1976 if (prof3d .EQ. 0) then 1977 temp = f[:]->$vNam(varn)$ 1978 temp_att = f_att->$vNam(varn)$ 1979 if (log_z .EQ. 1) then 1980 do j=0,np-1 1981 data(varn,j,:) = temp(ti_in(j),1:dimz-1) 1982 end do 1983 else 1984 do j=0,np-1 1985 data(varn,j,:) = temp(ti_in(j),0:dimz-1) 1986 end do 1987 end if 1988 else 1989 if (log_z .EQ. 1) then 1990 do i=1,dimz-1 1991 do j=0,np-1 1992 temp = f[:]->$vNam(varn)$ 1993 temp_att = f_att->$vNam(varn)$ 1994 data_temp = temp(ti_in(j),i,\ 1995 start_y:end_y,start_x:end_x) 1996 data(varn,j,i-1) = dim_avg_Wrap(\ 1997 dim_avg_Wrap(data_temp)) 1998 end do 1999 end do 2000 else 2001 do i=0,dimz-1 2002 do j=0,np-1 2003 temp = f[:]->$vNam(varn)$ 2004 temp_att = f_att->$vNam(varn)$ 2005 data_temp = temp(ti_in(j),i,\ 2006 start_y:end_y,start_x:end_x) 2007 data(varn,j,i) = dim_avg_Wrap(dim_avg_Wrap(data_temp)) 2008 end do 2009 end do 2010 end if 2011 print(" ") 2012 print("Variable for combine '"+vNam(varn)+"' is read") 2013 print(" ") 2014 end if 2015 unit(varn) = temp_att@units 2016 if (n_o .GT. number_comb-1) then 2017 print(" ") 2018 print("Set 'number_comb' to the number of overlaying "+\ 2019 "variables ('c_var' = "+c_var+")") 2020 print(" ") 2021 exit 2022 end if 2023 if (abs(min(data(varn,:,:))) .GT. 10)then 2024 min_value = abs(0.01*min(data(varn,:,:))) 2025 max_value = abs(0.01*max(data(varn,:,:))) 2026 else 2027 if (abs(min(data(varn,:,:))) .LT. 0.01 .AND. \ 2028 abs(max(data(varn,:,:))) .GT. 0.01)then 2029 min_value = abs(0.1*max(data(varn,:,:))) 2030 max_value = abs(0.1*max(data(varn,:,:))) 2031 else 2032 if (abs(max(data(varn,:,:))) .LT. 0.01 .AND. \ 2033 abs(min(data(varn,:,:))) .GT. 0.01)then 2034 min_value = abs(0.1*min(data(varn,:,:))) 2035 max_value = abs(0.1*min(data(varn,:,:))) 2036 else 2037 min_value = abs(0.1*min(data(varn,:,:))) 2038 max_value = abs(0.1*max(data(varn,:,:))) 2039 end if 2040 end if 2041 end if 2042 if (min(data(varn,:,:)) .EQ. 0 .AND. \ 2043 max(data(varn,:,:)) .EQ. 0)then 2044 min_value = 0.1 2045 max_value = 0.1 2046 end if 2047 mini(n_o)=min(data(varn,:,:)) 2048 maxi(n_o)=max(data(varn,:,:)) 2049 n_o=n_o+1 2050 end if 2051 end if 2052 2053 if(check) then 2054 2055 count_var=count_var+1 2056 2057 if (prof3d .EQ. 0) then 2058 temp = f[:]->$vNam(varn)$ 2059 temp_att = f_att->$vNam(varn)$ 2060 else 2061 if (log_z .EQ. 1) then 2062 do i=1,dimz-1 2063 do j=0,np-1 2064 temp= f[:]->$vNam(varn)$ 2065 temp_att = f_att->$vNam(varn)$ 2066 data_temp = temp(ti_in(j),i,start_y:end_y,start_x:end_x) 2067 data(varn,j,i-1) = dim_avg_Wrap(dim_avg_Wrap(data_temp)) 2068 delete(data_temp) 2069 end do 2070 end do 2071 else 2072 do i=0,dimz-1 2073 do j=0,np-1 2074 temp= f[:]->$vNam(varn)$ 2075 temp_att = f_att->$vNam(varn)$ 2076 data_temp = temp(ti_in(j),i,start_y:end_y,start_x:end_x) 2077 data_temp!0 = "t" 2078 data_temp!1 = "z" 2079 data(varn,j,i) = dim_avg_Wrap(dim_avg_Wrap(data_temp)) 2080 delete(data_temp) 2081 end do 2082 end do 2083 end if 2084 print(" ") 2085 print("Variable '"+vNam(varn)+"' is read") 2086 print(" ") 2087 unit(varn) = temp_att@units 2088 a=getvardims(temp_att) 2089 b=dimsizes(a) 2090 end if 2091 2092 if (prof3d .EQ. 0) then 2093 if (log_z .EQ. 1) then 2094 z = f_att->$vNam(varn+1)$(1:dimz-1) 2095 unit(varn) = temp_att@units 2096 do j=0,np-1 2097 data(varn,j,:) = temp(ti_in(j),1:dimz-1) 2098 end do 2099 else 2100 z = f_att->$vNam(varn+1)$ 2101 unit(varn) = temp_att@units 2102 do j=0,np-1 2103 data(varn,j,:) = temp(ti_in(j),:) 2104 end do 2105 end if 2106 else 2107 do i=0,b-1 2108 if (isStrSubset( a(i),"zu_3d" ))then 2109 z_v(varn,:) = z_u 2110 if (log_z .EQ. 1) then 2111 z = z_v(varn,1:dimz-1) 2112 else 2113 z = z_v(varn,:) 2114 end if 2115 else 2116 if (isStrSubset( a(i),"zw_3d" ))then 2117 z_v(varn,:) = z_w 2118 if (log_z .EQ. 1) then 2119 z = z_v(varn,1:dimz-1) 2120 else 2121 z = z_v(varn,:) 2122 end if 2123 end if 2124 end if 2125 end do 2126 end if 2127 2128 if (isStrSubset(data@long_name," SR " ) ) then 2129 over = 0 2130 end if 2131 2132 if (nof .EQ. 0) then 2133 z_(n,:)=z/norm_z 2134 z = z_(n,:) 2135 else 2136 z=z/norm_z 2137 end if 2138 2139 delta_z = z(2) - z(1) 2140 2141 max_z_int=doubletoint(max_z/delta_z) 2142 min_z_int=doubletoint(min_z/delta_z) 2143 2144 if(max_z_int .eq. min_z_int) 2145 print(" ") 2146 print("Please increase 'max_z' or decrease 'min_z' so that "+\ 2147 "there are") 2148 print("at least two layers for the z-axis to plot") 2149 print(" ") 2150 exit 2151 end if 2152 2153 if(min_z_int .gt. max_z_int) 2154 print(" ") 2155 print("'min_z' is greater than 'max_z',") 2156 print("please change this") 2157 print(" ") 2158 exit 2159 end if 2160 2161 if (max_z_int .ge. dimz-1) 2162 max_z_int = dimz-1 2163 if (log_z .EQ. 1) then 2164 max_z_int = max_z_int - 1 2165 end if 2166 end if 2167 2168 if (min_z_int .lt. 0) 2169 min_z_int = 0 2170 if (log_z .EQ. 1) then 2171 min_z_int = min_z_int + 1 2172 end if 2173 end if 2174 2175 ;data can contain missing values in case of output of t=0h (inital profiles) 2176 ;where no output is possible 2177 n_not_ismissing = num(.not.ismissing(data(varn,:,:))) 2178 2179 if (n_not_ismissing .GT. 0 ) then 4363 2180 4364 plot(0) = plot_o(0) 4365 4366 end if 2181 if (abs(min(data(varn,:,min_z_int:max_z_int))) .GT. 10)then 2182 min_value = abs(0.001*min(data(varn,:,min_z_int:max_z_int))) 2183 max_value = abs(0.001*max(data(varn,:,min_z_int:max_z_int))) 2184 else 2185 if (abs(min(data(varn,:,min_z_int:max_z_int))) .LT. 0.01 .AND. \ 2186 abs(max(data(varn,:,min_z_int:max_z_int))) .GT. 0.01)then 2187 min_value = abs(0.1*max(data(varn,:,min_z_int:max_z_int))) 2188 max_value = abs(0.1*max(data(varn,:,min_z_int:max_z_int))) 2189 else 2190 if (abs(max(data(varn,:,min_z_int:max_z_int))) .LT. 0.01 .AND.\ 2191 abs(min(data(varn,:,min_z_int:max_z_int))) .GT. 0.01)then 2192 min_value = abs(0.1*min(data(varn,:,min_z_int:max_z_int))) 2193 max_value = abs(0.1*min(data(varn,:,min_z_int:max_z_int))) 2194 else 2195 min_value = abs(0.1*min(data(varn,:,min_z_int:max_z_int))) 2196 max_value = abs(0.1*max(data(varn,:,min_z_int:max_z_int))) 2197 end if 2198 end if 2199 end if 2200 2201 if (min(data(varn,:,min_z_int:max_z_int)) .EQ. 0 .AND. \ 2202 max(data(varn,:,min_z_int:max_z_int)) .EQ. 0)then 2203 min_value = 0.1 2204 max_value = 0.1 2205 end if 2206 2207 else 2208 print(" ") 2209 print(vNam(varn) + " contains only missing values") 2210 print(" ") 2211 end if 2212 2213 if (over .EQ. 0) then 2214 res@gsnLeftString = " " 2215 res@tiXAxisString = "("+unit(varn)+")" 2216 res@gsnRightString = " " 2217 res@trYMinF = min_z 2218 res@trYMaxF = max_z 2219 if (xs .EQ. -1) then 2220 res@trXMinF = min(data(varn,:,min_z_int:max_z_int))-\ 2221 min_value 2222 else 2223 res@trXMinF = xs 2224 end if 2225 if (xe .EQ. -1) then 2226 res@trXMaxF = max(data(varn,:,min_z_int:max_z_int))+\ 2227 max_value 2228 else 2229 res@trXMaxF = xe 2230 end if 2231 2232 if (c_var_log .EQ. 1) then 2233 if ((mod(com_i, no_rows * no_columns) .EQ. 0) .AND. (no_files .LT. 2))then 2234 res@pmLegendDisplayMode = "Always" 2235 else 2236 res@pmLegendDisplayMode = "Never" 2237 end if 2238 else 2239 if ((mod(no_plots-1-n+combine, no_rows * no_columns) .EQ. 0) .AND. (no_files .LT. 2))then 2240 res@pmLegendDisplayMode = "Always" 2241 else 2242 res@pmLegendDisplayMode = "Never" 2243 end if 2244 end if 2245 2246 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2247 2248 end if 2249 2250 2251 if (vNam(varn) .EQ. "u" ) then 2252 miniu=min(data(varn,:,min_z_int:max_z_int))-min_value 2253 maxiu=max(data(varn,:,min_z_int:max_z_int))+max_value 2254 if (over .EQ. 1) then 2255 res@xyDashPattern = 0 2256 plot_u = gsn_csm_xy(wks,data(varn,:,:),z,res) 2257 else 2258 res@gsnLeftString = " " 2259 res@tiXAxisString = "("+unit(varn)+")" 2260 res@gsnRightString = " " 2261 if (xs .EQ. -1) then 2262 res@trXMinF = miniu 2263 else 2264 res@trXMinF = xs 2265 end if 2266 if (xe .EQ. -1) then 2267 res@trXMaxF = maxiu 2268 else 2269 res@trXMaxF = xe 2270 end if 2271 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2272 end if 2273 end if 2274 if (vNam(varn) .EQ. "v") then 2275 miniv=min(data(varn,:,min_z_int:max_z_int))-min_value 2276 maxiv=max(data(varn,:,min_z_int:max_z_int))+max_value 2277 if (over .EQ. 1) then 2278 res@xyMonoDashPattern = True 2279 res@xyDashPattern = 1 2280 plot_v = gsn_csm_xy(wks,data(varn,:,:),z,res) 2281 else 2282 res@gsnLeftString = " " 2283 res@tiXAxisString = "("+unit(varn)+")" 2284 res@gsnRightString = " " 2285 if (xs .EQ. -1) then 2286 res@trXMinF = miniv 2287 else 2288 res@trXMinF = xs 2289 end if 2290 if (xe .EQ. -1) then 2291 res@trXMaxF = maxiv 2292 else 2293 res@trXMaxF = xe 2294 end if 2295 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2296 end if 2297 end if 2298 if (vNam(varn) .EQ. "w") then 2299 miniw=min(data(varn,:,min_z_int:max_z_int))-min_value 2300 maxiw=max(data(varn,:,min_z_int:max_z_int))+max_value 2301 if (over .EQ. 1) then 2302 res@xyDashPattern = 2 2303 plot_w = gsn_csm_xy(wks,data(varn,:,:),z,res) 2304 else 2305 res@gsnLeftString = " " 2306 res@tiXAxisString = "("+unit(varn)+")" 2307 res@gsnRightString = " " 2308 if (xs .EQ. -1) then 2309 res@trXMinF = miniw 2310 else 2311 res@trXMinF = xs 2312 end if 2313 if (xe .EQ. -1) then 2314 res@trXMaxF = maxiw 2315 else 2316 res@trXMaxF = xe 2317 end if 2318 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2319 end if 2320 end if 2321 2322 if (vNam(varn) .EQ. "pt") then 2323 minipt=min(data(varn,:,min_z_int:max_z_int))-min_value 2324 maxipt=max(data(varn,:,min_z_int:max_z_int))+max_value 2325 if (over .EQ. 1) then 2326 res@xyDashPattern = 0 2327 plot_pt = gsn_csm_xy(wks,data(varn,:,:),z,res) 2328 else 2329 res@gsnLeftString = " " 2330 res@tiXAxisString = "("+unit(varn)+")" 2331 res@gsnRightString = " " 2332 if (xs .EQ. -1) then 2333 res@trXMinF = minipt 2334 else 2335 res@trXMinF = xs 2336 end if 2337 if (xe .EQ. -1) then 2338 res@trXMaxF = maxipt 2339 else 2340 res@trXMaxF = xe 2341 end if 2342 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2343 end if 2344 end if 2345 if (vNam(varn) .EQ. "vpt") then 2346 minivpt=min(data(varn,:,min_z_int:max_z_int))-min_value 2347 maxivpt=max(data(varn,:,min_z_int:max_z_int))+max_value 2348 if (over .EQ. 1) then 2349 res@xyDashPattern = 1 2350 plot_vpt = gsn_csm_xy(wks,data(varn,:,:),z,res) 2351 else 2352 res@gsnLeftString = " " 2353 res@tiXAxisString = "("+unit(varn)+")" 2354 res@gsnRightString = " " 2355 if (xs .EQ. -1) then 2356 res@trXMinF = minivpt 2357 else 2358 res@trXMinF = xs 2359 end if 2360 if (xe .EQ. -1) then 2361 res@trXMaxF = maxivpt 2362 else 2363 res@trXMaxF = xe 2364 end if 2365 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2366 end if 2367 end if 2368 if (vNam(varn) .EQ. "lpt") then 2369 minilpt=min(data(varn,:,min_z_int:max_z_int))-min_value 2370 maxilpt=max(data(varn,:,min_z_int:max_z_int))+max_value 2371 if (over .EQ. 1) then 2372 res@xyDashPattern = 2 2373 plot_lpt = gsn_csm_xy(wks,data(varn,:,:),z,res) 2374 else 2375 res@gsnLeftString = " " 2376 res@tiXAxisString = "("+unit(varn)+")" 2377 res@gsnRightString = " " 2378 if (xs .EQ. -1) then 2379 res@trXMinF = minilpt 2380 else 2381 res@trXMinF = xs 2382 end if 2383 if (xe .EQ. -1) then 2384 res@trXMaxF = maxilpt 2385 else 2386 res@trXMaxF = xe 2387 end if 2388 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2389 end if 2390 end if 2391 2392 if (vNam(varn) .EQ. "q") then 2393 miniq=min(data(varn,:,min_z_int:max_z_int))-min_value 2394 maxiq=max(data(varn,:,min_z_int:max_z_int))+max_value 2395 if (over .EQ. 1) then 2396 res@xyDashPattern = 0 2397 plot_q = gsn_csm_xy(wks,data(varn,:,:),z,res) 2398 else 2399 res@gsnLeftString = " " 2400 res@tiXAxisString = "("+unit(varn)+")" 2401 res@gsnRightString = " " 2402 if (xs .EQ. -1) then 2403 res@trXMinF = miniq 2404 else 2405 res@trXMinF = xs 2406 end if 2407 if (xe .EQ. -1) then 2408 res@trXMaxF = maxiq 2409 else 2410 res@trXMaxF = xe 2411 end if 2412 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2413 end if 2414 end if 2415 if (vNam(varn) .EQ. "qv") then 2416 miniqv=min(data(varn,:,min_z_int:max_z_int))-min_value 2417 maxiqv=max(data(varn,:,min_z_int:max_z_int))+max_value 2418 if (over .EQ. 1) then 2419 res@xyDashPattern = 1 2420 plot_qv = gsn_csm_xy(wks,data(varn,:,:),z,res) 2421 else 2422 res@gsnLeftString = " " 2423 res@tiXAxisString = "("+unit(varn)+")" 2424 res@gsnRightString = " " 2425 if (xs .EQ. -1) then 2426 res@trXMinF = miniqv 2427 else 2428 res@trXMinF = xs 2429 end if 2430 if (xe .EQ. -1) then 2431 res@trXMaxF = maxiqv 2432 else 2433 res@trXMaxF = xe 2434 end if 2435 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2436 end if 2437 end if 2438 if (vNam(varn) .EQ. "ql") then 2439 miniql=min(data(varn,:,min_z_int:max_z_int))-min_value 2440 maxiql=max(data(varn,:,min_z_int:max_z_int))+max_value 2441 if (over .EQ. 1) then 2442 res@xyDashPattern = 2 2443 plot_ql = gsn_csm_xy(wks,data(varn,:,:),z,res) 2444 else 2445 res@gsnLeftString = " " 2446 res@tiXAxisString = "("+unit(varn)+")" 2447 res@gsnRightString = " " 2448 if (xs .EQ. -1) then 2449 res@trXMinF = miniql 2450 else 2451 res@trXMinF = xs 2452 end if 2453 if (xe .EQ. -1) then 2454 res@trXMaxF = maxiql 2455 else 2456 res@trXMaxF = xe 2457 end if 2458 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2459 end if 2460 end if 2461 2462 if (vNam(varn) .EQ. "e") then 2463 minie=min(data(varn,:,min_z_int:max_z_int))-min_value 2464 maxie=max(data(varn,:,min_z_int:max_z_int))+max_value 2465 if (over .EQ. 1) then 2466 res@xyDashPattern = 0 2467 plot_e = gsn_csm_xy(wks,data(varn,:,:),z,res) 2468 else 2469 res@gsnLeftString = " " 2470 res@tiXAxisString = "("+unit(varn)+")" 2471 res@gsnRightString = " " 2472 if (xs .EQ. -1) then 2473 res@trXMinF = minie 2474 else 2475 res@trXMinF = xs 2476 end if 2477 if (xe .EQ. -1) then 2478 res@trXMaxF = maxie 2479 else 2480 res@trXMaxF = xe 2481 end if 2482 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2483 end if 2484 end if 2485 if (vNam(varn) .EQ. "es" .OR. vNam(varn) .EQ. "e*") then 2486 minies=min(data(varn,:,min_z_int:max_z_int))-min_value 2487 maxies=max(data(varn,:,min_z_int:max_z_int))+max_value 2488 if (over .EQ. 1) then 2489 res@xyDashPattern = 1 2490 plot_es = gsn_csm_xy(wks,data(varn,:,:),z,res) 2491 else 2492 res@gsnLeftString = " " 2493 res@tiXAxisString = "("+unit(varn)+")" 2494 res@gsnRightString = " " 2495 if (xs .EQ. -1) then 2496 res@trXMinF = minies 2497 else 2498 res@trXMinF = xs 2499 end if 2500 if (xe .EQ. -1) then 2501 res@trXMaxF = maxies 2502 else 2503 res@trXMaxF = xe 2504 end if 2505 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2506 end if 2507 end if 2508 2509 if (vNam(varn) .EQ. "km") then 2510 minikm=min(data(varn,:,min_z_int:max_z_int))-min_value 2511 maxikm=max(data(varn,:,min_z_int:max_z_int))+max_value 2512 if (over .EQ. 1) then 2513 res@xyDashPattern = 0 2514 plot_km = gsn_csm_xy(wks,data(varn,:,:),z,res) 2515 else 2516 res@gsnLeftString = " " 2517 res@tiXAxisString = "("+unit(varn)+")" 2518 res@gsnRightString = " " 2519 if (xs .EQ. -1) then 2520 res@trXMinF = minikm 2521 else 2522 res@trXMinF = xs 2523 end if 2524 if (xe .EQ. -1) then 2525 res@trXMaxF = maxikm 2526 else 2527 res@trXMaxF = xe 2528 end if 2529 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2530 end if 2531 end if 2532 if (vNam(varn) .EQ. "kh") then 2533 minikh=min(data(varn,:,min_z_int:max_z_int))-min_value 2534 maxikh=max(data(varn,:,min_z_int:max_z_int))+max_value 2535 if (over .EQ. 1) then 2536 res@xyDashPattern = 1 2537 plot_kh = gsn_csm_xy(wks,data(varn,:,:),z,res) 2538 else 2539 res@gsnLeftString = " " 2540 res@tiXAxisString = "("+unit(varn)+")" 2541 res@gsnRightString = " " 2542 if (xs .EQ. -1) then 2543 res@trXMinF = minikh 2544 else 2545 res@trXMinF = xs 2546 end if 2547 if (xe .EQ. -1) then 2548 res@trXMaxF = maxikh 2549 else 2550 res@trXMaxF = xe 2551 end if 2552 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2553 end if 2554 end if 2555 2556 if (vNam(varn) .EQ. "wpup" .OR. vNam(varn) .EQ. "w"+dq+"u"+dq) then 2557 miniwpup=min(data(varn,:,min_z_int:max_z_int))-min_value 2558 maxiwpup=max(data(varn,:,min_z_int:max_z_int))+max_value 2559 if (over .EQ. 1) then 2560 res@xyDashPattern = 0 2561 plot_wpup = gsn_csm_xy(wks,data(varn,:,:),z,res) 2562 else 2563 res@gsnLeftString = " " 2564 res@tiXAxisString = "("+unit(varn)+")" 2565 res@gsnRightString = " " 2566 if (xs .EQ. -1) then 2567 res@trXMinF = miniwpup 2568 else 2569 res@trXMinF = xs 2570 end if 2571 if (xe .EQ. -1) then 2572 res@trXMaxF = maxiwpup 2573 else 2574 res@trXMaxF = xe 2575 end if 2576 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2577 end if 2578 end if 2579 if (vNam(varn) .EQ. "wsus" .OR. vNam(varn) .EQ. "w*u*") then 2580 miniwsus=min(data(varn,:,min_z_int:max_z_int))-min_value 2581 maxiwsus=max(data(varn,:,min_z_int:max_z_int))+max_value 2582 if (over .EQ. 1) then 2583 res@xyDashPattern = 1 2584 plot_wsus = gsn_csm_xy(wks,data(varn,:,:),z,res) 2585 else 2586 res@gsnLeftString = " " 2587 res@tiXAxisString = "("+unit(varn)+")" 2588 res@gsnRightString = " " 2589 if (xs .EQ. -1) then 2590 res@trXMinF = miniwsus 2591 else 2592 res@trXMinF = xs 2593 end if 2594 if (xe .EQ. -1) then 2595 res@trXMaxF = maxiwsus 2596 else 2597 res@trXMaxF = xe 2598 end if 2599 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2600 end if 2601 end if 2602 if (vNam(varn) .EQ. "wu") then 2603 miniwu=min(data(varn,:,min_z_int:max_z_int))-min_value 2604 maxiwu=max(data(varn,:,min_z_int:max_z_int))+max_value 2605 if (over .EQ. 1) then 2606 res@xyDashPattern = 2 2607 plot_wu = gsn_csm_xy(wks,data(varn,:,:),z,res) 2608 else 2609 res@gsnLeftString = " " 2610 res@tiXAxisString = "("+unit(varn)+")" 2611 res@gsnRightString = " " 2612 if (xs .EQ. -1) then 2613 res@trXMinF = miniwu 2614 else 2615 res@trXMinF = xs 2616 end if 2617 if (xe .EQ. -1) then 2618 res@trXMaxF = maxiwu 2619 else 2620 res@trXMaxF = xe 2621 end if 2622 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2623 end if 2624 end if 2625 2626 if (vNam(varn) .EQ. "wpvp" .OR. vNam(varn) .EQ. "w"+dq+"v"+dq) then 2627 miniwpvp=min(data(varn,:,min_z_int:max_z_int))-min_value 2628 maxiwpvp=max(data(varn,:,min_z_int:max_z_int))+max_value 2629 if (over .EQ. 1) then 2630 res@xyDashPattern = 0 2631 plot_wpvp = gsn_csm_xy(wks,data(varn,:,:),z,res) 2632 else 2633 res@gsnLeftString = " " 2634 res@tiXAxisString = "("+unit(varn)+")" 2635 res@gsnRightString = " " 2636 if (xs .EQ. -1) then 2637 res@trXMinF = miniwpvp 2638 else 2639 res@trXMinF = xs 2640 end if 2641 if (xe .EQ. -1) then 2642 res@trXMaxF = maxiwpvp 2643 else 2644 res@trXMaxF = xe 2645 end if 2646 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2647 end if 2648 end if 2649 if (vNam(varn) .EQ. "wsvs" .OR. vNam(varn) .EQ. "w*v*") then 2650 miniwsvs=min(data(varn,:,min_z_int:max_z_int))-min_value 2651 maxiwsvs=max(data(varn,:,min_z_int:max_z_int))+max_value 2652 if (over .EQ. 1) then 2653 res@xyDashPattern = 1 2654 plot_wsvs = gsn_csm_xy(wks,data(varn,:,:),z,res) 2655 else 2656 res@gsnLeftString = " " 2657 res@tiXAxisString = "("+unit(varn)+")" 2658 res@gsnRightString = " " 2659 if (xs .EQ. -1) then 2660 res@trXMinF = miniwsvs 2661 else 2662 res@trXMinF = xs 2663 end if 2664 if (xe .EQ. -1) then 2665 res@trXMaxF = maxiwsvs 2666 else 2667 res@trXMaxF = xe 2668 end if 2669 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2670 end if 2671 end if 2672 if (vNam(varn) .EQ. "wv") then 2673 miniwv=min(data(varn,:,min_z_int:max_z_int))-min_value 2674 maxiwv=max(data(varn,:,min_z_int:max_z_int))+max_value 2675 if (over .EQ. 1) then 2676 res@xyDashPattern = 2 2677 plot_wv = gsn_csm_xy(wks,data(varn,:,:),z,res) 2678 else 2679 res@gsnLeftString = " " 2680 res@tiXAxisString = "("+unit(varn)+")" 2681 res@gsnRightString = " " 2682 if (xs .EQ. -1) then 2683 res@trXMinF = miniwv 2684 else 2685 res@trXMinF = xs 2686 end if 2687 if (xe .EQ. -1) then 2688 res@trXMaxF = maxiwv 2689 else 2690 res@trXMaxF = xe 2691 end if 2692 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2693 end if 2694 end if 2695 2696 if (vNam(varn) .EQ. "wpptp" .OR. vNam(varn) \ 2697 .EQ. "w"+dq+"pt"+dq) then 2698 miniwpptp=min(data(varn,:,min_z_int:max_z_int))-min_value 2699 maxiwpptp=max(data(varn,:,min_z_int:max_z_int))+max_value 2700 if (over .EQ. 1) then 2701 res@xyDashPattern = 0 2702 plot_wpptp = gsn_csm_xy(wks,data(varn,:,:),z,res) 2703 else 2704 res@gsnLeftString = " " 2705 res@tiXAxisString = "("+unit(varn)+")" 2706 res@gsnRightString = " " 2707 if (xs .EQ. -1) then 2708 res@trXMinF = miniwpptp 2709 else 2710 res@trXMinF = xs 2711 end if 2712 if (xe .EQ. -1) then 2713 res@trXMaxF = maxiwpptp 2714 else 2715 res@trXMaxF = xe 2716 end if 2717 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2718 end if 2719 end if 2720 if (vNam(varn) .EQ. "wspts" .OR. vNam(varn) .EQ. "w*pt*") then 2721 miniwspts=min(data(varn,:,min_z_int:max_z_int))-min_value 2722 maxiwspts=max(data(varn,:,min_z_int:max_z_int))+max_value 2723 if (over .EQ. 1) then 2724 res@xyDashPattern = 1 2725 plot_wspts = gsn_csm_xy(wks,data(varn,:,:),z,res) 2726 else 2727 res@gsnLeftString = " " 2728 res@tiXAxisString = "("+unit(varn)+")" 2729 res@gsnRightString = " " 2730 if (xs .EQ. -1) then 2731 res@trXMinF = miniwspts 2732 else 2733 res@trXMinF = xs 2734 end if 2735 if (xe .EQ. -1) then 2736 res@trXMaxF = maxiwspts 2737 else 2738 res@trXMaxF = xe 2739 end if 2740 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2741 end if 2742 end if 2743 if (vNam(varn) .EQ. "wpt") then 2744 miniwpt=min(data(varn,:,min_z_int:max_z_int))-min_value 2745 maxiwpt=max(data(varn,:,min_z_int:max_z_int))+max_value 2746 if (over .EQ. 1) then 2747 res@xyDashPattern = 2 2748 plot_wpt = gsn_csm_xy(wks,data(varn,:,:),z,res) 2749 else 2750 res@gsnLeftString = " " 2751 res@tiXAxisString = "("+unit(varn)+")" 2752 res@gsnRightString = " " 2753 if (xs .EQ. -1) then 2754 res@trXMinF = miniwpt 2755 else 2756 res@trXMinF = xs 2757 end if 2758 if (xe .EQ. -1) then 2759 res@trXMaxF = maxiwpt 2760 else 2761 res@trXMaxF = xe 2762 end if 2763 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2764 end if 2765 end if 2766 2767 if (vNam(varn) .EQ. "wsptsBC".OR. vNam(varn) .EQ. "w*pt*BC" ) then 2768 miniwsptsBC=min(data(varn,:,min_z_int:max_z_int))-min_value 2769 maxiwsptsBC=max(data(varn,:,min_z_int:max_z_int))+max_value 2770 if (over .EQ. 1) then 2771 res@xyDashPattern = 0 2772 plot_wsptsBC = gsn_csm_xy(wks,data(varn,:,:),z,res) 2773 else 2774 res@gsnLeftString = " " 2775 res@tiXAxisString = "("+unit(varn)+")" 2776 res@gsnRightString = " " 2777 if (xs .EQ. -1) then 2778 res@trXMinF = miniwsptsBC 2779 else 2780 res@trXMinF = xs 2781 end if 2782 if (xe .EQ. -1) then 2783 res@trXMaxF = maxiwsptsBC 2784 else 2785 res@trXMaxF = xe 2786 end if 2787 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2788 end if 2789 end if 2790 if (vNam(varn) .EQ. "wptBC") then 2791 miniwptBC=min(data(varn,:,min_z_int:max_z_int))-min_value 2792 maxiwptBC=max(data(varn,:,min_z_int:max_z_int))+max_value 2793 if (over .EQ. 1) then 2794 res@xyDashPattern = 1 2795 plot_wptBC = gsn_csm_xy(wks,data(varn,:,:),z,res) 2796 else 2797 res@gsnLeftString = " " 2798 res@tiXAxisString = "("+unit(varn)+")" 2799 res@gsnRightString = " " 2800 if (xs .EQ. -1) then 2801 res@trXMinF = miniwptBC 2802 else 2803 res@trXMinF = xs 2804 end if 2805 if (xe .EQ. -1) then 2806 res@trXMaxF = maxiwptBC 2807 else 2808 res@trXMaxF = xe 2809 end if 2810 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2811 end if 2812 end if 2813 2814 if (vNam(varn) .EQ. "wpvptp" .OR. vNam(varn) \ 2815 .EQ. "w"+dq+"vpt"+dq) then 2816 miniwpvptp=min(data(varn,:,min_z_int:max_z_int))-min_value 2817 maxiwpvptp=max(data(varn,:,min_z_int:max_z_int))+max_value 2818 if (over .EQ. 1) then 2819 res@xyDashPattern = 0 2820 plot_wpvptp = gsn_csm_xy(wks,data(varn,:,:),z,res) 2821 else 2822 res@gsnLeftString = " " 2823 res@tiXAxisString = "("+unit(varn)+")" 2824 res@gsnRightString = " " 2825 if (xs .EQ. -1) then 2826 res@trXMinF = miniwpvptp 2827 else 2828 res@trXMinF = xs 2829 end if 2830 if (xe .EQ. -1) then 2831 res@trXMaxF = maxiwpvptp 2832 else 2833 res@trXMaxF = xe 2834 end if 2835 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2836 end if 2837 end if 2838 if (vNam(varn) .EQ. "wsvpts" .OR. vNam(varn) .EQ. "w*vpt*") then 2839 miniwsvpts=min(data(varn,:,min_z_int:max_z_int))-min_value 2840 maxiwsvpts=max(data(varn,:,min_z_int:max_z_int))+max_value 2841 if (over .EQ. 1) then 2842 res@xyDashPattern = 1 2843 plot_wsvpts = gsn_csm_xy(wks,data(varn,:,:),z,res) 2844 else 2845 res@gsnLeftString = " " 2846 res@tiXAxisString = "("+unit(varn)+")" 2847 res@gsnRightString = " " 2848 if (xs .EQ. -1) then 2849 res@trXMinF = miniwsvpts 2850 else 2851 res@trXMinF = xs 2852 end if 2853 if (xe .EQ. -1) then 2854 res@trXMaxF = maxiwsvpts 2855 else 2856 res@trXMaxF = xe 2857 end if 2858 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2859 end if 2860 end if 2861 if (vNam(varn) .EQ. "wvpt") then 2862 miniwvpt=min(data(varn,:,min_z_int:max_z_int))-min_value 2863 maxiwvpt=max(data(varn,:,min_z_int:max_z_int))+max_value 2864 if (over .EQ. 1) then 2865 res@xyDashPattern = 2 2866 plot_wvpt = gsn_csm_xy(wks,data(varn,:,:),z,res) 2867 else 2868 res@gsnLeftString = " " 2869 res@tiXAxisString = "("+unit(varn)+")" 2870 res@gsnRightString = " " 2871 if (xs .EQ. -1) then 2872 res@trXMinF = miniwvpt 2873 else 2874 res@trXMinF = xs 2875 end if 2876 if (xe .EQ. -1) then 2877 res@trXMaxF = maxiwvpt 2878 else 2879 res@trXMaxF = xe 2880 end if 2881 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2882 end if 2883 end if 2884 2885 if (vNam(varn) .EQ. "wpqp" .OR. vNam(varn) .EQ. "w"+dq+"q"+dq) then 2886 miniwpqp=min(data(varn,:,min_z_int:max_z_int))-min_value 2887 maxiwpqp=max(data(varn,:,min_z_int:max_z_int))+max_value 2888 if (over .EQ. 1) then 2889 res@xyDashPattern = 0 2890 plot_wpqp = gsn_csm_xy(wks,data(varn,:,:),z,res) 2891 else 2892 res@gsnLeftString = " " 2893 res@tiXAxisString = "("+unit(varn)+")" 2894 res@gsnRightString = " " 2895 if (xs .EQ. -1) then 2896 res@trXMinF = miniwpqp 2897 else 2898 res@trXMinF = xs 2899 end if 2900 if (xe .EQ. -1) then 2901 res@trXMaxF = maxiwpqp 2902 else 2903 res@trXMaxF = xe 2904 end if 2905 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2906 end if 2907 end if 2908 if (vNam(varn) .EQ. "wsqs".OR. vNam(varn) .EQ. "w*s*" ) then 2909 miniwsqs=min(data(varn,:,min_z_int:max_z_int))-min_value 2910 maxiwsqs=max(data(varn,:,min_z_int:max_z_int))+max_value 2911 if (over .EQ. 1) then 2912 res@xyDashPattern = 1 2913 plot_wsqs = gsn_csm_xy(wks,data(varn,:,:),z,res) 2914 else 2915 res@gsnLeftString = " " 2916 res@tiXAxisString = "("+unit(varn)+")" 2917 res@gsnRightString = " " 2918 if (xs .EQ. -1) then 2919 res@trXMinF = miniwsqs 2920 else 2921 res@trXMinF = xs 2922 end if 2923 if (xe .EQ. -1) then 2924 res@trXMaxF = maxiwsqs 2925 else 2926 res@trXMaxF = xe 2927 end if 2928 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2929 end if 2930 end if 2931 if (vNam(varn) .EQ. "wq") then 2932 miniwq=min(data(varn,:,min_z_int:max_z_int))-min_value 2933 maxiwq=max(data(varn,:,min_z_int:max_z_int))+max_value 2934 if (over .EQ. 1) then 2935 res@xyDashPattern = 2 2936 plot_wq = gsn_csm_xy(wks,data(varn,:,:),z,res) 2937 else 2938 res@gsnLeftString = " " 2939 res@tiXAxisString = "("+unit(varn)+")" 2940 res@gsnRightString = " " 2941 if (xs .EQ. -1) then 2942 res@trXMinF = miniwq 2943 else 2944 res@trXMinF = xs 2945 end if 2946 if (xe .EQ. -1) then 2947 res@trXMaxF = maxiwq 2948 else 2949 res@trXMaxF = xe 2950 end if 2951 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2952 end if 2953 end if 2954 2955 if (vNam(varn) .EQ. "wpqvp" .OR. \ 2956 vNam(varn) .EQ. "w"+dq+"qv"+dq) then 2957 miniwpqvp=min(data(varn,:,min_z_int:max_z_int))-min_value 2958 maxiwpqvp=max(data(varn,:,min_z_int:max_z_int))+max_value 2959 if (over .EQ. 1) then 2960 res@xyDashPattern = 0 2961 plot_wpqvp = gsn_csm_xy(wks,data(varn,:,:),z,res) 2962 else 2963 res@gsnLeftString = " " 2964 res@tiXAxisString = "("+unit(varn)+")" 2965 res@gsnRightString = " " 2966 if (xs .EQ. -1) then 2967 res@trXMinF = miniwpqvp 2968 else 2969 res@trXMinF = xs 2970 end if 2971 if (xe .EQ. -1) then 2972 res@trXMaxF = maxiwpqvp 2973 else 2974 res@trXMaxF = xe 2975 end if 2976 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 2977 end if 2978 end if 2979 if (vNam(varn) .EQ. "wsqvs" .OR. vNam(varn) .EQ. "w*qv*") then 2980 miniwsqvs=min(data(varn,:,min_z_int:max_z_int))-min_value 2981 maxiwsqvs=max(data(varn,:,min_z_int:max_z_int))+max_value 2982 if (over .EQ. 1) then 2983 res@xyDashPattern = 1 2984 plot_wsqvs = gsn_csm_xy(wks,data(varn,:,:),z,res) 2985 else 2986 res@gsnLeftString = " " 2987 res@tiXAxisString = "("+unit(varn)+")" 2988 res@gsnRightString = " " 2989 if (xs .EQ. -1) then 2990 res@trXMinF = miniwsqvs 2991 else 2992 res@trXMinF = xs 2993 end if 2994 if (xe .EQ. -1) then 2995 res@trXMaxF = maxiwsqvs 2996 else 2997 res@trXMaxF = xe 2998 end if 2999 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3000 end if 3001 end if 3002 if (vNam(varn) .EQ. "wqv") then 3003 miniwqv=min(data(varn,:,min_z_int:max_z_int))-min_value 3004 maxiwqv=max(data(varn,:,min_z_int:max_z_int))+max_value 3005 if (over .EQ. 1) then 3006 res@xyDashPattern = 2 3007 plot_wqv = gsn_csm_xy(wks,data(varn,:,:),z,res) 3008 else 3009 res@gsnLeftString = " " 3010 res@tiXAxisString = "("+unit(varn)+")" 3011 res@gsnRightString = " " 3012 if (xs .EQ. -1) then 3013 res@trXMinF = miniwqv 3014 else 3015 res@trXMinF = xs 3016 end if 3017 if (xe .EQ. -1) then 3018 res@trXMaxF = maxiwqv 3019 else 3020 res@trXMaxF = xe 3021 end if 3022 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3023 end if 3024 end if 3025 3026 if (vNam(varn) .EQ. "wpsp" .OR. vNam(varn) .EQ. "w"+dq+"s"+dq) then 3027 miniwpsp=min(data(varn,:,min_z_int:max_z_int))-min_value 3028 maxiwpsp=max(data(varn,:,min_z_int:max_z_int))+max_value 3029 if (over .EQ. 1) then 3030 res@xyDashPattern = 0 3031 plot_wpsp = gsn_csm_xy(wks,data(varn,:,:),z,res) 3032 else 3033 res@gsnLeftString = " " 3034 res@tiXAxisString = "("+unit(varn)+")" 3035 res@gsnRightString = " " 3036 if (xs .EQ. -1) then 3037 res@trXMinF = miniwpsp 3038 else 3039 res@trXMinF = xs 3040 end if 3041 if (xe .EQ. -1) then 3042 res@trXMaxF = maxiwpsp 3043 else 3044 res@trXMaxF = xe 3045 end if 3046 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3047 end if 3048 end if 3049 if (vNam(varn) .EQ. "wsss" .OR. vNam(varn) .EQ. "w*s*" ) then 3050 miniwsss=min(data(varn,:,min_z_int:max_z_int))-min_value 3051 maxiwsss=max(data(varn,:,min_z_int:max_z_int))+max_value 3052 if (over .EQ. 1) then 3053 res@xyDashPattern = 1 3054 plot_wsss = gsn_csm_xy(wks,data(varn,:,:),z,res) 3055 else 3056 res@gsnLeftString = " " 3057 res@tiXAxisString = "("+unit(varn)+")" 3058 res@gsnRightString = " " 3059 if (xs .EQ. -1) then 3060 res@trXMinF = miniwsss 3061 else 3062 res@trXMinF = xs 3063 end if 3064 if (xe .EQ. -1) then 3065 res@trXMaxF = maxiwsss 3066 else 3067 res@trXMaxF = xe 3068 end if 3069 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3070 end if 3071 end if 3072 if (vNam(varn) .EQ. "ws") then 3073 miniws=min(data(varn,:,min_z_int:max_z_int))-min_value 3074 maxiws=max(data(varn,:,min_z_int:max_z_int))+max_value 3075 if (over .EQ. 1) then 3076 res@xyDashPattern = 2 3077 plot_ws = gsn_csm_xy(wks,data(varn,:,:),z,res) 3078 else 3079 res@gsnLeftString = " " 3080 res@tiXAxisString = "("+unit(varn)+")" 3081 res@gsnRightString = " " 3082 if (xs .EQ. -1) then 3083 res@trXMinF = miniws 3084 else 3085 res@trXMinF = xs 3086 end if 3087 if (xe .EQ. -1) then 3088 res@trXMaxF = maxiws 3089 else 3090 res@trXMaxF = xe 3091 end if 3092 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3093 end if 3094 end if 3095 3096 if (vNam(varn) .EQ. "wpsap" .OR. \ 3097 vNam(varn) .EQ. "w"+dq+"sa"+dq) then 3098 miniwpsap=min(data(varn,:,min_z_int:max_z_int))-min_value 3099 maxiwpsap=max(data(varn,:,min_z_int:max_z_int))+max_value 3100 if (over .EQ. 1) then 3101 res@xyDashPattern = 0 3102 plot_wpsap = gsn_csm_xy(wks,data(varn,:,:),z,res) 3103 else 3104 res@gsnLeftString = " " 3105 res@tiXAxisString = "("+unit(varn)+")" 3106 res@gsnRightString = " " 3107 if (xs .EQ. -1) then 3108 res@trXMinF = miniwpsap 3109 else 3110 res@trXMinF = xs 3111 end if 3112 if (xe .EQ. -1) then 3113 res@trXMaxF = maxiwpsap 3114 else 3115 res@trXMaxF = xe 3116 end if 3117 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3118 end if 3119 end if 3120 if (vNam(varn) .EQ. "wssas" .OR. vNam(varn) .EQ. "w*sa*") then 3121 miniwssas=min(data(varn,:,min_z_int:max_z_int))-min_value 3122 maxiwssas=max(data(varn,:,min_z_int:max_z_int))+max_value 3123 if (over .EQ. 1) then 3124 res@xyDashPattern = 1 3125 plot_wssas = gsn_csm_xy(wks,data(varn,:,:),z,res) 3126 else 3127 res@gsnLeftString = " " 3128 res@tiXAxisString = "("+unit(varn)+")" 3129 res@gsnRightString = " " 3130 if (xs .EQ. -1) then 3131 res@trXMinF = miniwssas 3132 else 3133 res@trXMinF = xs 3134 end if 3135 if (xe .EQ. -1) then 3136 res@trXMaxF = maxiwssas 3137 else 3138 res@trXMaxF = xe 3139 end if 3140 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3141 end if 3142 end if 3143 if (vNam(varn) .EQ. "wsa") then 3144 miniwsa=min(data(varn,:,min_z_int:max_z_int))-min_value 3145 maxiwsa=max(data(varn,:,min_z_int:max_z_int))+max_value 3146 if (over .EQ. 1) then 3147 res@xyDashPattern = 2 3148 plot_wsa = gsn_csm_xy(wks,data(varn,:,:),z,res) 3149 else 3150 res@gsnLeftString = " " 3151 res@tiXAxisString = "("+unit(varn)+")" 3152 res@gsnRightString = " " 3153 if (xs .EQ. -1) then 3154 res@trXMinF = miniwsa 3155 else 3156 res@trXMinF = xs 3157 end if 3158 if (xe .EQ. -1) then 3159 res@trXMaxF = maxiwsa 3160 else 3161 res@trXMaxF = xe 3162 end if 3163 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3164 end if 3165 end if 3166 3167 if (vNam(varn) .EQ. "us2" .OR. vNam(varn) .EQ. "u*2") then 3168 minius2=min(data(varn,:,min_z_int:max_z_int))-min_value 3169 maxius2=max(data(varn,:,min_z_int:max_z_int))+max_value 3170 if (over .EQ. 1) then 3171 res@xyDashPattern = 0 3172 plot_us2 = gsn_csm_xy(wks,data(varn,:,:),z,res) 3173 else 3174 res@gsnLeftString = " " 3175 res@tiXAxisString = "("+unit(varn)+")" 3176 res@gsnRightString = " " 3177 if (xs .EQ. -1) then 3178 res@trXMinF = minius2 3179 else 3180 res@trXMinF = xs 3181 end if 3182 if (xe .EQ. -1) then 3183 res@trXMaxF = maxius2 3184 else 3185 res@trXMaxF = xe 3186 end if 3187 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3188 end if 3189 end if 3190 if (vNam(varn) .EQ. "vs2" .OR. vNam(varn) .EQ. "v*2") then 3191 minivs2=min(data(varn,:,min_z_int:max_z_int))-min_value 3192 maxivs2=max(data(varn,:,min_z_int:max_z_int))+max_value 3193 if (over .EQ. 1) then 3194 res@xyDashPattern = 1 3195 plot_vs2 = gsn_csm_xy(wks,data(varn,:,:),z,res) 3196 else 3197 res@gsnLeftString = " " 3198 res@tiXAxisString = "("+unit(varn)+")" 3199 res@gsnRightString = " " 3200 if (xs .EQ. -1) then 3201 res@trXMinF = minivs2 3202 else 3203 res@trXMinF = xs 3204 end if 3205 if (xe .EQ. -1) then 3206 res@trXMaxF = maxivs2 3207 else 3208 res@trXMaxF = xe 3209 end if 3210 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3211 end if 3212 end if 3213 if (vNam(varn) .EQ. "ws2" .OR. vNam(varn) .EQ. "w*2") then 3214 miniws2=min(data(varn,:,min_z_int:max_z_int))-min_value 3215 maxiws2=max(data(varn,:,min_z_int:max_z_int))+max_value 3216 if (over .EQ. 1) then 3217 res@xyDashPattern = 2 3218 plot_ws2 = gsn_csm_xy(wks,data(varn,:,:),z,res) 3219 else 3220 res@gsnLeftString = " " 3221 res@tiXAxisString = "("+unit(varn)+")" 3222 res@gsnRightString = " " 3223 if (xs .EQ. -1) then 3224 res@trXMinF = miniws2 3225 else 3226 res@trXMinF = xs 3227 end if 3228 if (xe .EQ. -1) then 3229 res@trXMaxF = maxiws2 3230 else 3231 res@trXMaxF = xe 3232 end if 3233 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3234 end if 3235 end if 3236 3237 if (vNam(varn) .EQ. "wsususodz" .OR. \ 3238 vNam(varn) .EQ. "w*u*u*:dz") then 3239 miniwsususodz=min(data(varn,:,min_z_int:max_z_int))-min_value 3240 maxiwsususodz=max(data(varn,:,min_z_int:max_z_int))+max_value 3241 if (over .EQ. 1) then 3242 res@xyDashPattern = 0 3243 plot_wsususodz = gsn_csm_xy(wks,data(varn,:,:),z,res) 3244 else 3245 res@gsnLeftString = " " 3246 res@tiXAxisString = "("+unit(varn)+")" 3247 res@gsnRightString = " " 3248 if (xs .EQ. -1) then 3249 res@trXMinF = miniwsususodz 3250 else 3251 res@trXMinF = xs 3252 end if 3253 if (xe .EQ. -1) then 3254 res@trXMaxF = maxiwsususodz 3255 else 3256 res@trXMaxF = xe 3257 end if 3258 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3259 end if 3260 end if 3261 if (vNam(varn) .EQ. "wspsodz" .OR. vNam(varn) .EQ. "w*p*:dz") then 3262 miniwspsodz=min(data(varn,:,min_z_int:max_z_int))-min_value 3263 maxiwspsodz=max(data(varn,:,min_z_int:max_z_int))+max_value 3264 if (over .EQ. 1) then 3265 res@xyDashPattern = 1 3266 plot_wspsodz = gsn_csm_xy(wks,data(varn,:,:),z,res) 3267 else 3268 res@gsnLeftString = " " 3269 res@tiXAxisString = "("+unit(varn)+")" 3270 res@gsnRightString = " " 3271 if (xs .EQ. -1) then 3272 res@trXMinF = miniwspsodz 3273 else 3274 res@trXMinF = xs 3275 end if 3276 if (xe .EQ. -1) then 3277 res@trXMaxF = maxiwspsodz 3278 else 3279 res@trXMaxF = xe 3280 end if 3281 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3282 end if 3283 end if 3284 if (vNam(varn) .EQ. "wpeodz" .OR. \ 3285 vNam(varn) .EQ. "w"+dq+"p:dz") then 3286 miniwpeodz=min(data(varn,:,min_z_int:max_z_int))-min_value 3287 maxiwpeodz=max(data(varn,:,min_z_int:max_z_int))+max_value 3288 if (over .EQ. 1) then 3289 res@xyDashPattern = 2 3290 plot_wpeodz = gsn_csm_xy(wks,data(varn,:,:),z,res) 3291 else 3292 res@gsnLeftString = " " 3293 res@tiXAxisString = "("+unit(varn)+")" 3294 res@gsnRightString = " " 3295 if (xs .EQ. -1) then 3296 res@trXMinF = miniwpeodz 3297 else 3298 res@trXMinF = xs 3299 end if 3300 if (xe .EQ. -1) then 3301 res@trXMaxF = maxiwpeodz 3302 else 3303 res@trXMaxF = xe 3304 end if 3305 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3306 end if 3307 end if 3308 3309 ; *************************************************** 3310 ; legend for each plot 3311 ; *************************************************** 3312 3313 if (over .EQ. 0) then 3314 3315 label = vNam(varn) 3316 3317 lgres1 = True 3318 lgMonoDashIndex = False 3319 lgres1@lgDashIndexes = (/0,1,2/) 3320 lgres1@lgLabelFont = "helvetica" 3321 lgres1@lgLabelFontHeightF = font_size_legend * 10.0 * 0.7 3322 lgres1@vpWidthF = 0.12 3323 lgres1@vpHeightF = 0.1 / 3.0 + 0.01 3324 3325 lbid = gsn_create_legend(wks,1,label,lgres1) 3326 3327 amres = True 3328 amres@amParallelPosF = -0.5 3329 amres@amOrthogonalPosF = -0.5 3330 amres@amJust = "TopLeft" 3331 3332 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3333 3334 end if 3335 3336 if (no_files .GT. 1) then 3337 print("nof="+nof+" und n="+n) 3338 multi_plot(nof,n)=plot(n) 3339 max_nof(nof,n)=max(data(varn,:,min_z_int:max_z_int)) 3340 min_nof(nof,n)=min(data(varn,:,min_z_int:max_z_int)) 3341 name(nof,n) =vNam(varn) 3342 unit_(nof,n) =unit(varn) 3343 end if 3344 if (over .EQ. 0) then 3345 n=n+1 3346 end if 3347 if (prof3d .EQ. 0)then 3348 varn=varn+1 3349 end if 3350 delete(temp) 3351 delete(temp_att) 3352 end if 3353 end do 3354 if (no_files .GT. 1) then 3355 delete(vNam) 3356 delete(files) 3357 end if 3358 3359 end do 3360 3361 ;#########ENDE DO LOOP FOR no_files GT 1############# 3362 3363 if (isStrSubset(data@long_name," SR " ) .and. over_remind) then 3364 print(" ") 3365 print("If you have outputs of statistic regions you cannot overlay "+\ 3366 "variables;") 3367 print("'over' is set to 0" ) 3368 print(" ") 3369 over = 0 3370 end if 3371 3372 if (count_var .EQ. 0) then 3373 print(" ") 3374 print("The variables 'var="+var+"'" ) 3375 print("do not exist on your input file;") 3376 print("be sure to have one comma before and after each variable") 3377 print(" ") 3378 exit 3379 end if 3380 3381 if (no_files .GT. 1) then 3382 multi_legend=new(6,string) 3383 string_len=new(6,integer) 3384 multi_dash=new(no_files,string) 3385 multi_legend(0)=" "+name_legend_1 3386 string_len(0)=strlen(multi_legend(0)) 3387 multi_legend(1)=" "+name_legend_2 3388 string_len(1)=strlen(multi_legend(1)) 3389 multi_legend(2)=" "+name_legend_3 3390 string_len(2)=strlen(multi_legend(2)) 3391 multi_legend(3)=" "+name_legend_4 3392 string_len(3)=strlen(multi_legend(3)) 3393 multi_legend(4)=" "+name_legend_5 3394 string_len(4)=strlen(multi_legend(4)) 3395 multi_legend(5)=" "+name_legend_6 3396 string_len(5)=strlen(multi_legend(5)) 3397 do ml=1,no_files 3398 multi_dash(ml-1)=ml-1 3399 end do 3400 delete(plot) 3401 plot = new(dim,graphic) 3402 do pl=0,n-1 3403 plot0 = new(1,graphic) 3404 res@trXMinF = min(min_nof(:,pl)) 3405 res@trXMaxF = max(max_nof(:,pl)) 3406 res@gsnLeftString = " "; name(0,pl) 3407 res@gsnRightString = " ";unit_(0,pl) 3408 res@tiXAxisString = "(" + unit_(0,pl) + ")" 3409 data_0(:,:) = min(min_nof(:,pl)) 3410 3411 if (mod(no_plots - pl + 1, no_rows * no_columns) .EQ. 2) then 3412 res@pmLegendDisplayMode = "Always" 3413 else 3414 res@pmLegendDisplayMode = "Never" 3415 end if 3416 3417 plot0 = gsn_csm_xy(wks,data_0(:,:),z_(pl,:),res) 3418 3419 ; *************************************************** 3420 ; legend for combined plot 3421 ; *************************************************** 3422 3423 if (mod(no_plots - pl + 1, no_rows * no_columns) .EQ. 2)then 3424 lgres = True 3425 lgMonoDashIndex = False 3426 lgres@lgLabelFont = "helvetica" 3427 lgres@lgLabelFontHeightF = font_size_legend * 10.0 3428 lgres@vpWidthF = max(string_len)*0.02;0.015 3429 lgres@vpHeightF = 0.03*no_files 3430 lgres@lgDashIndexes = multi_dash(no_files-1:0) 3431 lbid = gsn_create_legend(\ 3432 wks,no_files,multi_legend(no_files-1:0),lgres) 3433 3434 amres = True 3435 amres@amParallelPosF = -0.5 3436 amres@amOrthogonalPosF = -0.55 3437 amres@amJust = "BottomLeft" 3438 annoid1 = gsn_add_annotation(plot0,lbid,amres) 3439 end if 3440 3441 do plo=0,no_files-1 3442 overlay(plot0,multi_plot(plo,pl)) 3443 plot(pl)=plot0 3444 end do 3445 delete(plot0) 3446 end do 3447 end if 3448 3449 if (count_var .EQ. 0) then 3450 print(" ") 3451 print("Select a variable 'var=' or use the default value") 3452 print(" ") 3453 print("Your selection '"+var+"' does not exist on the input file") 3454 print(" ") 3455 exit 3456 end if 3457 3458 if (over .EQ. 1 ) then 3459 3460 overlay(plot_u,plot_v) 3461 overlay(plot_u,plot_w) 3462 u=0 3463 overlay(plot_pt,plot_vpt) 3464 overlay(plot_pt,plot_lpt) 3465 pt=0 3466 overlay(plot_q,plot_qv) 3467 overlay(plot_q,plot_ql) 3468 q=0 3469 overlay(plot_e,plot_es) 3470 e=0 3471 overlay(plot_km,plot_kh) 3472 km=0 3473 overlay(plot_wpup,plot_wsus) 3474 overlay(plot_wpup,plot_wu) 3475 wpup=0 3476 overlay(plot_wpvp,plot_wsvs) 3477 overlay(plot_wpvp,plot_wv) 3478 wpvp=0 3479 overlay(plot_wpptp,plot_wspts) 3480 overlay(plot_wpptp,plot_wpt) 3481 wpptp=0 3482 overlay(plot_wsptsBC,plot_wptBC) 3483 wsptsBC=0 3484 overlay(plot_wpvptp,plot_wsvpts) 3485 overlay(plot_wpvptp,plot_wvpt) 3486 wpvptp=0 3487 overlay(plot_wpqp,plot_wsqs) 3488 overlay(plot_wpqp,plot_wq) 3489 wpqp=0 3490 overlay(plot_wpqvp,plot_wsqvs) 3491 overlay(plot_wpqvp,plot_wqv) 3492 wpqvp=0 3493 overlay(plot_wpsp,plot_wsss) 3494 overlay(plot_wpsp,plot_ws) 3495 wpsp=0 3496 overlay(plot_wpsap,plot_wssas) 3497 overlay(plot_wpsap,plot_wsa) 3498 wpsap=0 3499 overlay(plot_us2,plot_vs2) 3500 overlay(plot_us2,plot_ws2) 3501 us2=0 3502 overlay(plot_wsususodz,plot_wspsodz) 3503 overlay(plot_wsususodz,plot_wpeodz) 3504 wsususodz=0 3505 3506 end if 3507 3508 if (over .EQ. 1) then 3509 3510 do varn = 0,dim-1 3511 3512 check = True 3513 3514 if (prof3d .EQ. 0) then 3515 if ( isStrSubset( vNam(varn), "time") .OR. \ 3516 isStrSubset( vNam(varn), "NORM")) then 3517 check = False 3518 end if 3519 else 3520 if ( isStrSubset( vNam(varn), "time") .OR. \ 3521 isStrSubset( vNam(varn), "zusi") .OR. \ 3522 isStrSubset( vNam(varn), "zwwi") .OR. \ 3523 isStrSubset( vNam(varn), "x") .OR. \ 3524 isStrSubset( vNam(varn), "xu") .OR. \ 3525 isStrSubset( vNam(varn), "y") .OR. \ 3526 isStrSubset( vNam(varn), "yv") .OR. \ 3527 isStrSubset( vNam(varn), "zu_3d") .OR. \ 3528 isStrSubset( vNam(varn), "zw_3d")) then 3529 check = False 3530 end if 3531 end if 3532 3533 if (var .NE. "all") then 3534 check = isStrSubset( var,","+vNam(varn)+"," ) 3535 end if 3536 3537 if (check)then 3538 3539 if (prof3d .EQ. 0) then 3540 if (log_z .EQ. 1) then 3541 z = f_att->$vNam(varn+1)$(1:dimz-1) 3542 else 3543 z = f_att->$vNam(varn+1)$ 3544 end if 3545 else 3546 do i=0,b-1 3547 if (isStrSubset( a(i),"zu_3d" ))then 3548 z_v(varn,:) = z_u 3549 if (log_z .EQ. 1) then 3550 z = z_v(varn,1:dimz-1) 3551 else 3552 z = z_v(varn,:) 3553 end if 3554 else 3555 if (isStrSubset( a(i),"zw_3d" ))then 3556 z_v(varn,:) = z_w 3557 if (log_z .EQ. 1) then 3558 z = z_v(varn,1:dimz-1) 3559 else 3560 z = z_v(varn,:) 3561 end if 3562 end if 3563 end if 3564 end do 3565 end if 3566 3567 z=z/norm_z 3568 3569 if (abs(min(data(varn,:,min_z_int:max_z_int))) .GT. 10)then 3570 min_value = abs(0.01*min(data(varn,:,min_z_int:max_z_int))) 3571 max_value = abs(0.01*max(data(varn,:,min_z_int:max_z_int))) 3572 else 3573 if (abs(min(data(varn,:,min_z_int:max_z_int))) .LT. 0.01 .AND. \ 3574 abs(max(data(varn,:,min_z_int:max_z_int))) .GT. 0.01)then 3575 min_value = abs(0.1*max(data(varn,:,min_z_int:max_z_int))) 3576 max_value = abs(0.1*max(data(varn,:,min_z_int:max_z_int))) 3577 else 3578 if (abs(max(data(varn,:,:))) .LT. 0.01 .AND. \ 3579 abs(min(data(varn,:,min_z_int:max_z_int))) .GT. 0.01)then 3580 min_value = abs(0.1*min(data(varn,:,min_z_int:max_z_int))) 3581 max_value = abs(0.1*min(data(varn,:,min_z_int:max_z_int))) 3582 else 3583 min_value = abs(0.1*min(data(varn,:,min_z_int:max_z_int))) 3584 max_value = abs(0.1*max(data(varn,:,min_z_int:max_z_int))) 3585 end if 3586 end if 3587 end if 3588 if (min(data(varn,:,min_z_int:max_z_int)) .EQ. 0 .AND.\ 3589 max(data(varn,:,min_z_int:max_z_int)) .EQ. 0)then 3590 min_value = 0.1 3591 max_value = 0.1 3592 end if 3593 3594 res@gsnLeftString = vNam(varn) 3595 res@tiXAxisString = "("+unit(varn)+")" 3596 res@gsnRightString = " " 3597 res@trYMinF = min_z 3598 res@trYMaxF = max_z 3599 res@xyDashPattern = 0 3600 3601 if (xs .EQ. -1) then 3602 res@trXMinF = min(data(varn,:,min_z_int:max_z_int))-min_value 3603 else 3604 res@trXMinF = xs 3605 end if 3606 if (xe .EQ. -1) then 3607 res@trXMaxF = max(data(varn,:,min_z_int:max_z_int))+max_value 3608 else 3609 res@trXMaxF = xe 3610 end if 3611 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3612 3613 if (vNam(varn) .EQ. "u" .OR. vNam(varn) .EQ. "v" .OR. \ 3614 vNam(varn) .EQ. "w") then 3615 if (u .EQ. 0) then 3616 res@gsnLeftString = "u, v and w" 3617 res@tiXAxisString = "("+unit(varn)+")" 3618 res@gsnRightString = " " 3619 if (xs .EQ. -1) then 3620 res@trXMinF = min((/miniu,miniv,miniw/)) 3621 else 3622 res@trXMinF = xs 3623 end if 3624 if (xe .EQ. -1) then 3625 res@trXMaxF = max((/maxiu,maxiv,maxiw/)) 3626 else 3627 res@trXMaxF = xe 3628 end if 3629 if (vNam(varn) .EQ. "v")then 3630 res@xyDashPattern = 1 3631 end if 3632 if (vNam(varn) .EQ. "w")then 3633 res@xyDashPattern = 2 3634 end if 3635 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3636 3637 ; *************************************************** 3638 ; legend for overlaid plot 3639 ; *************************************************** 3640 3641 lgres = True 3642 lgMonoDashIndex = False 3643 lgres@lgLabelFont = "helvetica" 3644 lgres@lgLabelFontHeightF = font_size_legend*10.0 3645 lgres@vpWidthF = 0.07 3646 lgres@vpHeightF = 0.12 3647 lgres@lgDashIndexes = (/0,1,2/) 3648 lbid = gsn_create_legend(wks,3,(/"u","v","w"/),lgres) 3649 3650 amres = True 3651 amres@amParallelPosF = 0.88 3652 amres@amOrthogonalPosF = 0.33 3653 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3654 overlay(plot(n),plot_u) 3655 u=1 3656 else 3657 if (prof3d .EQ. 0)then 3658 varn=varn+1 3659 end if 3660 continue 3661 end if 3662 end if 3663 3664 if (vNam(varn) .EQ. "pt" .OR. vNam(varn) .EQ. "vpt" .OR. \ 3665 vNam(varn) .EQ. "lpt") then 3666 if (pt .EQ. 0) then 3667 res@gsnLeftString = "pt, vpt and lpt" 3668 res@tiXAxisString = "("+unit(varn)+")" 3669 res@gsnRightString = " " 3670 if (xs .EQ. -1) then 3671 res@trXMinF = min((/minipt,minivpt,minilpt/)) 3672 else 3673 res@trXMinF = xs 3674 end if 3675 if (xe .EQ. -1) then 3676 res@trXMaxF = max((/maxipt,maxivpt,maxilpt/)) 3677 else 3678 res@trXMaxF = xe 3679 end if 3680 if (vNam(varn) .EQ. "vpt")then 3681 res@xyDashPattern = 1 3682 end if 3683 if (vNam(varn) .EQ. "lpt")then 3684 res@xyDashPattern = 2 3685 end if 3686 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3687 3688 ; *************************************************** 3689 ; legend for overlaid plot 3690 ; *************************************************** 3691 3692 lgres = True 3693 lgMonoDashIndex = False 3694 lgres@lgLabelFont = "helvetica" 3695 lgres@lgLabelFontHeightF = font_size_legend*10.0 3696 lgres@vpWidthF = 0.07 3697 lgres@vpHeightF = 0.12 3698 lgres@lgDashIndexes = (/0,1,2/) 3699 lbid = gsn_create_legend(wks,3,(/"pt","vpt","lpt"/),lgres) 3700 amres = True 3701 amres@amParallelPosF = 0.88 3702 amres@amOrthogonalPosF = 0.33 3703 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3704 overlay(plot(n),plot_pt) 3705 pt=1 3706 else 3707 if (prof3d .EQ. 0)then 3708 varn=varn+1 3709 end if 3710 continue 3711 end if 3712 end if 3713 if (vNam(varn) .EQ. "q" .OR. vNam(varn) .EQ. "qv" .OR. \ 3714 vNam(varn) .EQ. "ql") then 3715 if (q .EQ. 0) then 3716 res@gsnLeftString = "q, qv and ql" 3717 res@tiXAxisString = "("+unit(varn)+")" 3718 res@gsnRightString = " " 3719 if (xs .EQ. -1) then 3720 res@trXMinF = min((/miniq,miniqv,miniql/)) 3721 else 3722 res@trXMinF = xs 3723 end if 3724 if (xe .EQ. -1) then 3725 res@trXMaxF = max((/maxiq,maxiqv,maxiql/)) 3726 else 3727 res@trXMaxF = xe 3728 end if 3729 if (vNam(varn) .EQ. "qv")then 3730 res@xyDashPattern = 1 3731 end if 3732 if (vNam(varn) .EQ. "ql")then 3733 res@xyDashPattern = 2 3734 end if 3735 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3736 3737 ; *************************************************** 3738 ; legend for overlaid plot 3739 ; *************************************************** 3740 3741 lgres = True 3742 lgMonoDashIndex = False 3743 lgres@lgLabelFont = "helvetica" 3744 lgres@lgLabelFontHeightF = font_size_legend*10.0 3745 lgres@vpWidthF = 0.07 3746 lgres@vpHeightF = 0.12 3747 lgres@lgDashIndexes = (/0,1,2/) 3748 lbid = gsn_create_legend(wks,3,(/"q","qv","ql"/),lgres) 3749 3750 amres = True 3751 amres@amParallelPosF = 0.88 3752 amres@amOrthogonalPosF = 0.33 3753 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3754 overlay(plot(n),plot_q) 3755 q=1 3756 else 3757 if (prof3d .EQ. 0)then 3758 varn=varn+1 3759 end if 3760 continue 3761 end if 3762 end if 3763 3764 if (vNam(varn) .EQ. "e" .OR. vNam(varn) .EQ. "es" .OR. \ 3765 vNam(varn) .EQ. "e*" ) then 3766 if (e .EQ. 0) then 3767 res@gsnLeftString = "e and e*" 3768 res@tiXAxisString = "("+unit(varn)+")" 3769 res@gsnRightString = " " 3770 if (xs .EQ. -1) then 3771 res@trXMinF = min((/minie,minies/)) 3772 else 3773 res@trXMinF = xs 3774 end if 3775 if (xe .EQ. -1) then 3776 res@trXMaxF = max((/maxie,maxies/)) 3777 else 3778 res@trXMaxF = xe 3779 end if 3780 if (vNam(varn) .EQ. "es")then 3781 res@xyDashPattern = 1 3782 end if 3783 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3784 3785 ; *************************************************** 3786 ; legend for overlaid plot 3787 ; *************************************************** 3788 3789 lgres = True 3790 lgMonoDashIndex = False 3791 lgres@lgLabelFont = "helvetica" 3792 lgres@lgLabelFontHeightF = font_size_legend*10.0 3793 lgres@vpWidthF = 0.07 3794 lgres@vpHeightF = 0.08 3795 lgres@lgDashIndexes = (/0,1,2/) 3796 lbid = gsn_create_legend(wks,2,(/"e","e*"/),lgres) 3797 3798 amres = True 3799 amres@amParallelPosF = 0.88 3800 amres@amOrthogonalPosF = 0.365 3801 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3802 overlay(plot(n),plot_e) 3803 e=1 3804 else 3805 if (prof3d .EQ. 0)then 3806 varn=varn+1 3807 end if 3808 continue 3809 end if 3810 end if 3811 if (vNam(varn) .EQ. "km" .OR. vNam(varn) .EQ. "kh") then 3812 if (km .EQ. 0) then 3813 res@gsnLeftString = "km and kh" 3814 res@tiXAxisString = "("+unit(varn)+")" 3815 res@gsnRightString = " " 3816 if (xs .EQ. -1) then 3817 res@trXMinF = min((/minikm,minikh/)) 3818 else 3819 res@trXMinF = xs 3820 end if 3821 if (xe .EQ. -1) then 3822 res@trXMaxF = max((/maxikm,maxikh/)) 3823 else 3824 res@trXMaxF = xe 3825 end if 3826 if (vNam(varn) .EQ. "kh")then 3827 res@xyDashPattern = 1 3828 end if 3829 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3830 3831 ; *************************************************** 3832 ; legend for overlaid plot 3833 ; *************************************************** 3834 3835 lgres = True 3836 lgMonoDashIndex = False 3837 lgres@lgLabelFont = "helvetica" 3838 lgres@lgLabelFontHeightF = font_size_legend*10.0 3839 lgres@vpWidthF = 0.07 3840 lgres@vpHeightF = 0.08 3841 lgres@lgDashIndexes = (/0,1,2/) 3842 lbid = gsn_create_legend(wks,2,(/"km","kh"/),lgres) 3843 3844 amres = True 3845 amres@amParallelPosF = 0.88 3846 amres@amOrthogonalPosF = 0.365 3847 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3848 overlay(plot(n),plot_km) 3849 km=1 3850 else 3851 if (prof3d .EQ. 0)then 3852 varn=varn+1 3853 end if 3854 continue 3855 end if 3856 end if 3857 3858 if (vNam(varn) .EQ. "wpup" .OR. vNam(varn) .EQ. "wsus" .OR. \ 3859 vNam(varn) .EQ. "wu" .OR. vNam(varn) .EQ. "w"+dq+"u"+dq .OR. \ 3860 vNam(varn) .EQ. "w*u*") then 3861 if (wpup .EQ. 0) then 3862 res@gsnLeftString = "w"+dq+"u"+dq+", w*u* and wu" 3863 res@tiXAxisString = "("+unit(varn)+")" 3864 res@gsnRightString = " " 3865 if (xs .EQ. -1) then 3866 res@trXMinF = min((/miniwpup,miniwsus,miniwu/)) 3867 else 3868 res@trXMinF = xs 3869 end if 3870 if (xe .EQ. -1) then 3871 res@trXMaxF = max((/maxiwpup,maxiwsus,maxiwu/)) 3872 else 3873 res@trXMaxF = xe 3874 end if 3875 if (vNam(varn) .EQ. "wsus")then 3876 res@xyDashPattern = 1 3877 end if 3878 if (vNam(varn) .EQ. "wu")then 3879 res@xyDashPattern = 2 3880 end if 3881 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3882 3883 ; *************************************************** 3884 ; legend for overlaid plot 3885 ; *************************************************** 3886 3887 lgres = True 3888 lgMonoDashIndex = False 3889 lgres@lgLabelFont = "helvetica" 3890 lgres@lgLabelFontHeightF = font_size_legend*10.0 3891 lgres@vpWidthF = 0.08 3892 lgres@vpHeightF = 0.12 3893 lgres@lgDashIndexes = (/0,1,2/) 3894 lbid = gsn_create_legend(\ 3895 wks,3,(/"w"+dq+"u"+dq,"w*u*","wu"/),lgres) 3896 3897 amres = True 3898 amres@amParallelPosF = 0.88 3899 amres@amOrthogonalPosF = 0.33 3900 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3901 overlay(plot(n),plot_wpup) 3902 wpup=1 3903 else 3904 if (prof3d .EQ. 0)then 3905 varn=varn+1 3906 end if 3907 continue 3908 end if 3909 end if 3910 if (vNam(varn) .EQ. "wpvp" .OR. vNam(varn) .EQ. "wsvs" .OR. \ 3911 vNam(varn) .EQ. "wv" .OR. vNam(varn) .EQ. "w"+dq+"v"+dq .OR. \ 3912 vNam(varn) .EQ. "w*v*") then 3913 if (wpvp .EQ. 0) then 3914 res@gsnLeftString = "w"+dq+"v"+dq+", w*v* and wv" 3915 res@tiXAxisString = "("+unit(varn)+")" 3916 res@gsnRightString = " " 3917 if (xs .EQ. -1) then 3918 res@trXMinF = min((/miniwpvp,miniwsvs,miniwv/)) 3919 else 3920 res@trXMinF = xs 3921 end if 3922 if (xe .EQ. -1) then 3923 res@trXMaxF = max((/maxiwpvp,maxiwsvs,maxiwv/)) 3924 else 3925 res@trXMaxF = xe 3926 end if 3927 if (vNam(varn) .EQ. "wsvs")then 3928 res@xyDashPattern = 1 3929 end if 3930 if (vNam(varn) .EQ. "wv")then 3931 res@xyDashPattern = 2 3932 end if 3933 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3934 3935 ; *************************************************** 3936 ; legend for overlaid plot 3937 ; *************************************************** 3938 3939 lgres = True 3940 lgMonoDashIndex = False 3941 lgres@lgLabelFont = "helvetica" 3942 lgres@lgLabelFontHeightF = font_size_legend*10.0 3943 lgres@vpWidthF = 0.08 3944 lgres@vpHeightF = 0.12 3945 lgres@lgDashIndexes = (/0,1,2/) 3946 lbid = gsn_create_legend(\ 3947 wks,3,(/"w"+dq+"v"+dq,"w*v*","wv"/),lgres) 3948 3949 amres = True 3950 amres@amParallelPosF = 0.88 3951 amres@amOrthogonalPosF = 0.33 3952 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 3953 overlay(plot(n),plot_wpvp) 3954 wpvp=1 3955 else 3956 if (prof3d .EQ. 0)then 3957 varn=varn+1 3958 end if 3959 continue 3960 end if 3961 end if 3962 if (vNam(varn) .EQ. "wpptp" .OR. vNam(varn) .EQ. "wspts" .OR. \ 3963 vNam(varn) .EQ. "wpt" .OR. vNam(varn) .EQ. "w"+dq+"pt"+dq .OR.\ 3964 vNam(varn) .EQ. "w*pt*") then 3965 if (wpptp .EQ. 0) then 3966 res@gsnLeftString = "w"+dq+"pt"+dq+", w*pt* and wpt" 3967 res@tiXAxisString = "("+unit(varn)+")" 3968 res@gsnRightString = " " 3969 if (xs .EQ. -1) then 3970 res@trXMinF = min((/miniwpptp,miniwspts,miniwpt/)) 3971 else 3972 res@trXMinF = xs 3973 end if 3974 if (xe .EQ. -1) then 3975 res@trXMaxF = max((/maxiwpptp,maxiwspts,maxiwpt/)) 3976 else 3977 res@trXMaxF = xe 3978 end if 3979 if (vNam(varn) .EQ. "wspts" .OR. vNam(varn) .EQ. "w*pt*")then 3980 res@xyDashPattern = 1 3981 end if 3982 if (vNam(varn) .EQ. "wpt")then 3983 res@xyDashPattern = 2 3984 end if 3985 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 3986 3987 ; *************************************************** 3988 ; legend for overlaid plot 3989 ; *************************************************** 3990 3991 lgres = True 3992 lgMonoDashIndex = False 3993 lgres@lgLabelFont = "helvetica" 3994 lgres@lgLabelFontHeightF = font_size_legend*10.0 3995 lgres@vpWidthF = 0.09 3996 lgres@vpHeightF = 0.12 3997 lgres@lgDashIndexes = (/0,1,2/) 3998 lbid = gsn_create_legend(\ 3999 wks,3,(/"w"+dq+"pt"+dq,"w*pt*","wpt"/),lgres) 4000 4001 amres = True 4002 amres@amParallelPosF = 0.88 4003 amres@amOrthogonalPosF = 0.33 4004 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 4005 overlay(plot(n),plot_wpptp) 4006 wpptp=1 4007 else 4008 if (prof3d .EQ. 0)then 4009 varn=varn+1 4010 end if 4011 continue 4012 end if 4013 end if 4014 if (vNam(varn) .EQ. "wsptsBC" .OR. vNam(varn) .EQ. "wptBC" .OR.\ 4015 vNam(varn) .EQ. "w*pt*BC") then 4016 if (wsptsBC .EQ. 0) then 4017 res@gsnLeftString = "w*pt*BC and wptBC" 4018 res@tiXAxisString = "("+unit(varn)+")" 4019 res@gsnRightString = " " 4020 if (xs .EQ. -1) then 4021 res@trXMinF = min((/miniwsptsBC,miniwptBC/)) 4022 else 4023 res@trXMinF = xs 4024 end if 4025 if (xe .EQ. -1) then 4026 res@trXMaxF = max((/maxiwsptsBC,maxiwptBC/)) 4027 else 4028 res@trXMaxF = xe 4029 end if 4030 if (vNam(varn) .EQ. "wptBC")then 4031 res@xyDashPattern = 1 4032 end if 4033 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 4034 4035 ; *************************************************** 4036 ; legend for overlaid plot 4037 ; *************************************************** 4038 4039 lgres = True 4040 lgMonoDashIndex = False 4041 lgres@lgLabelFont = "helvetica" 4042 lgres@lgLabelFontHeightF = font_size_legend*10.0 4043 lgres@vpWidthF = 0.1 4044 lgres@vpHeightF = 0.12 4045 lgres@lgDashIndexes = (/0,1,2/) 4046 lbid = gsn_create_legend(\ 4047 wks,3,(/"w*pt*BC","wptBC"/),lgres) 4048 4049 amres = True 4050 amres@amParallelPosF = 0.88 4051 amres@amOrthogonalPosF = 0.33 4052 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 4053 overlay(plot(n),plot_wsptsBC) 4054 wsptsBC=1 4055 else 4056 if (prof3d .EQ. 0)then 4057 varn=varn+1 4058 end if 4059 continue 4060 end if 4061 end if 4062 if (vNam(varn) .EQ. "wpvptp" .OR. vNam(varn) .EQ. "wsvpts" .OR. \ 4063 vNam(varn) .EQ. "wvpt" .OR. vNam(varn) .EQ. \ 4064 "w"+dq+"vpt"+dq .OR. vNam(varn) .EQ. "w*vpt*") then 4065 if (wpvptp .EQ. 0) then 4066 res@gsnLeftString = "w"+dq+"vpt"+dq+", w*vpt* and wvpt" 4067 res@tiXAxisString = "("+unit(varn)+")" 4068 res@gsnRightString = " " 4069 if (xs .EQ. -1) then 4070 res@trXMinF = min((/miniwpvptp,miniwsvpts,miniwvpt/)) 4071 else 4072 res@trXMinF = xs 4073 end if 4074 if (xe .EQ. -1) then 4075 res@trXMaxF = max((/maxiwpvptp,maxiwsvpts,maxiwvpt/)) 4076 else 4077 res@trXMaxF = xe 4078 end if 4079 if (vNam(varn) .EQ. "wsvpts")then 4080 res@xyDashPattern = 1 4081 end if 4082 if (vNam(varn) .EQ. "wvpt")then 4083 res@xyDashPattern = 2 4084 end if 4085 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 4086 4087 ; *************************************************** 4088 ; legend for overlaid plot 4089 ; *************************************************** 4090 4091 lgres = True 4092 lgMonoDashIndex = False 4093 lgres@lgLabelFont = "helvetica" 4094 lgres@lgLabelFontHeightF = font_size_legend*10.0 4095 lgres@vpWidthF = 0.1 4096 lgres@vpHeightF = 0.12 4097 lgres@lgDashIndexes = (/0,1,2/) 4098 lbid = gsn_create_legend(\ 4099 wks,3,(/"w"+dq+"vpt"+dq,"w*vpt*","wvpt"/),lgres) 4100 amres = True 4101 amres@amParallelPosF = 0.88 4102 amres@amOrthogonalPosF = 0.33 4103 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 4104 overlay(plot(n),plot_wpvptp) 4105 wpvptp=1 4106 else 4107 if (prof3d .EQ. 0)then 4108 varn=varn+1 4109 end if 4110 continue 4111 end if 4112 end if 4113 if (vNam(varn) .EQ. "wpqp" .OR. vNam(varn) .EQ. "wsqs" .OR. \ 4114 vNam(varn) .EQ. "wq" .OR. vNam(varn) .EQ. "w"+dq+"q"+dq .OR. \ 4115 vNam(varn) .EQ. "w*q*") then 4116 if (wpqp .EQ. 0) then 4117 res@gsnLeftString = "w"+dq+"q"+dq+", w*q* and wq" 4118 res@tiXAxisString = "("+unit(varn)+")" 4119 res@gsnRightString = " " 4120 if (xs .EQ. -1) then 4121 res@trXMinF = min((/miniwpqp,miniwsqs,miniwq/)) 4122 else 4123 res@trXMinF = xs 4124 end if 4125 if (xe .EQ. -1) then 4126 res@trXMaxF = max((/maxiwpqp,maxiwsqs,maxiwq/)) 4127 else 4128 res@trXMaxF = xe 4129 end if 4130 if (vNam(varn) .EQ. "wsqs")then 4131 res@xyDashPattern = 1 4132 end if 4133 if (vNam(varn) .EQ. "wq")then 4134 res@xyDashPattern = 2 4135 end if 4136 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 4137 4138 ; *************************************************** 4139 ; legend for overlaid plot 4140 ; *************************************************** 4141 4142 lgres = True 4143 lgMonoDashIndex = False 4144 lgres@lgLabelFont = "helvetica" 4145 lgres@lgLabelFontHeightF = font_size_legend*10.0 4146 lgres@vpWidthF = 0.08 4147 lgres@vpHeightF = 0.12 4148 lgres@lgDashIndexes = (/0,1,2/) 4149 lbid = gsn_create_legend(\ 4150 wks,3,(/"w"+dq+"q"+dq,"w*q*","wq"/),lgres) 4151 4152 amres = True 4153 amres@amParallelPosF = 0.88 4154 amres@amOrthogonalPosF = 0.33 4155 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 4156 overlay(plot(n),plot_wpqp) 4157 wpqp=1 4158 else 4159 if (prof3d .EQ. 0)then 4160 varn=varn+1 4161 end if 4162 continue 4163 end if 4164 end if 4165 if (vNam(varn) .EQ. "wpqvp" .OR. vNam(varn) .EQ. "wsqvs" .OR. \ 4166 vNam(varn) .EQ. "wqv" .OR. vNam(varn) .EQ. "w"+dq+"qv"+dq .OR.\ 4167 vNam(varn) .EQ. "w*qv*") then 4168 if (wpqvp .EQ. 0) then 4169 res@gsnLeftString ="w"+dq+"qv"+dq+" , w*qv* and wqv" 4170 res@tiXAxisString = "("+unit(varn)+")" 4171 res@gsnRightString = " " 4172 if (xs .EQ. -1) then 4173 res@trXMinF = min((/miniwpqp,miniwsqvs,miniwqv/)) 4174 else 4175 res@trXMinF = xs 4176 end if 4177 if (xe .EQ. -1) then 4178 res@trXMaxF = max((/maxiwpqp,maxiwsqvs,maxiwqv/)) 4179 else 4180 res@trXMaxF = xe 4181 end if 4182 if (vNam(varn) .EQ. "wsqvs")then 4183 res@xyDashPattern = 1 4184 end if 4185 if (vNam(varn) .EQ. "wqv")then 4186 res@xyDashPattern = 2 4187 end if 4188 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 4189 4190 ; *************************************************** 4191 ; legend for overlaid plot 4192 ; *************************************************** 4193 4194 lgres = True 4195 lgMonoDashIndex = False 4196 lgres@lgLabelFont = "helvetica" 4197 lgres@lgLabelFontHeightF = font_size_legend*10.0 4198 lgres@vpWidthF = 0.09 4199 lgres@vpHeightF = 0.12 4200 lgres@lgDashIndexes = (/0,1,2/) 4201 lbid = gsn_create_legend(\ 4202 wks,3,(/"w"+dq+"qv"+dq,"w*qv*","wqv"/),lgres) 4203 4204 amres = True 4205 amres@amParallelPosF = 0.88 4206 amres@amOrthogonalPosF = 0.33 4207 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 4208 overlay(plot(n),plot_wpqvp) 4209 wpqvp=1 4210 else 4211 if (prof3d .EQ. 0)then 4212 varn=varn+1 4213 end if 4214 continue 4215 end if 4216 end if 4217 if (vNam(varn) .EQ. "wpsp" .OR. vNam(varn) .EQ. "wsss" .OR. \ 4218 vNam(varn) .EQ. "ws" .OR. vNam(varn) .EQ. "w"+dq+"s"+dq .OR.\ 4219 vNam(varn) .EQ. "w*s*") then 4220 if (wpsp .EQ. 0) then 4221 res@gsnLeftString = "w"+dq+"s"+dq+", w*s* and ws" 4222 res@tiXAxisString = "("+unit(varn)+")" 4223 res@gsnRightString = " " 4224 if (xs .EQ. -1) then 4225 res@trXMinF = min((/miniwpsp,miniwsss,miniws/)) 4226 else 4227 res@trXMinF = xs 4228 end if 4229 if (xe .EQ. -1) then 4230 res@trXMaxF = max((/maxiwpsp,maxiwsss,maxiws/)) 4231 else 4232 res@trXMaxF = xe 4233 end if 4234 if (vNam(varn) .EQ. "wsss")then 4235 res@xyDashPattern = 1 4236 end if 4237 if (vNam(varn) .EQ. "ws")then 4238 res@xyDashPattern = 2 4239 end if 4240 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 4241 4242 ; *************************************************** 4243 ; legend for overlaid plot 4244 ; *************************************************** 4245 4246 lgres = True 4247 lgMonoDashIndex = False 4248 lgres@lgLabelFont = "helvetica" 4249 lgres@lgLabelFontHeightF = font_size_legend*10.0 4250 lgres@vpWidthF = 0.08 4251 lgres@vpHeightF = 0.12 4252 lgres@lgDashIndexes = (/0,1,2/) 4253 lbid = gsn_create_legend(\ 4254 wks,3,(/"w"+dq+"s"+dq,"w*s*","ws"/),lgres) 4255 4256 amres = True 4257 amres@amParallelPosF = 0.88 4258 amres@amOrthogonalPosF = 0.33 4259 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 4260 overlay(plot(n),plot_wpsp) 4261 wpsp=1 4262 else 4263 if (prof3d .EQ. 0)then 4264 varn=varn+1 4265 end if 4266 continue 4267 end if 4268 end if 4269 if (vNam(varn) .EQ. "wpsap" .OR.vNam(varn) .EQ. "wssas" .OR. \ 4270 vNam(varn) .EQ. "wsa" .OR. vNam(varn) .EQ. "w"+dq+"sa"+dq .OR.\ 4271 vNam(varn) .EQ. "w*sa*") then 4272 if (wpsap .EQ. 0) then 4273 res@gsnLeftString = "w"+dq+"sa"+dq+", w*sa* and wsa" 4274 res@tiXAxisString = "("+unit(varn)+")" 4275 res@gsnRightString = " " 4276 if (xs .EQ. -1) then 4277 res@trXMinF = min((/miniwpsap,miniwssas,miniwsa/)) 4278 else 4279 res@trXMinF = xs 4280 end if 4281 if (xe .EQ. -1) then 4282 res@trXMaxF = max((/maxiwpsap,maxiwssas,maxiwsa/)) 4283 else 4284 res@trXMaxF = xe 4285 end if 4286 if (vNam(varn) .EQ. "wssas")then 4287 res@xyDashPattern = 1 4288 end if 4289 if (vNam(varn) .EQ. "wsa")then 4290 res@xyDashPattern = 2 4291 end if 4292 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 4293 4294 ; *************************************************** 4295 ; legend for overlaid plot 4296 ; *************************************************** 4297 4298 lgres = True 4299 lgMonoDashIndex = False 4300 lgres@lgLabelFont = "helvetica" 4301 lgres@lgLabelFontHeightF = font_size_legend*10.0 4302 lgres@vpWidthF = 0.09 4303 lgres@vpHeightF = 0.12 4304 lgres@lgDashIndexes = (/0,1,2/) 4305 lbid = gsn_create_legend(\ 4306 wks,3,(/"w"+dq+"sa"+dq,"w*sa*","wsa"/),lgres) 4307 amres = True 4308 amres@amParallelPosF = 0.88 4309 amres@amOrthogonalPosF = 0.33 4310 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 4311 overlay(plot(n),plot_wpsap) 4312 wpsap=1 4313 else 4314 if (prof3d .EQ. 0)then 4315 varn=varn+1 4316 end if 4317 continue 4318 end if 4319 end if 4320 4321 if (vNam(varn) .EQ. "us2" .OR. vNam(varn) .EQ. "vs2" .OR. \ 4322 vNam(varn) .EQ. "ws2" .OR. vNam(varn) .EQ. "u*2" .OR. \ 4323 vNam(varn) .EQ. "v*2" .OR. vNam(varn) .EQ. "w*2" ) then 4324 if (us2 .EQ. 0) then 4325 res@gsnLeftString = "u*2, v*2 and w*2" 4326 res@tiXAxisString = "("+unit(varn)+")" 4327 res@gsnRightString = " " 4328 if (xs .EQ. -1) then 4329 res@trXMinF = min((/minius2,minivs2,miniws2/)) 4330 else 4331 res@trXMinF = xs 4332 end if 4333 if (xe .EQ. -1) then 4334 res@trXMaxF = max((/maxius2,maxivs2,maxiws2/)) 4335 else 4336 res@trXMaxF = xe 4337 end if 4338 if (vNam(varn) .EQ. "vs2")then 4339 res@xyDashPattern = 1 4340 end if 4341 if (vNam(varn) .EQ. "ws2")then 4342 res@xyDashPattern = 2 4343 end if 4344 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 4345 4346 ; *************************************************** 4347 ; legend for overlaid plot 4348 ; *************************************************** 4349 4350 lgres = True 4351 lgMonoDashIndex = False 4352 lgres@lgLabelFont = "helvetica" 4353 lgres@lgLabelFontHeightF = font_size_legend*10.0 4354 lgres@vpWidthF = 0.07 4355 lgres@vpHeightF = 0.12 4356 lgres@lgDashIndexes = (/0,1,2/) 4357 lbid = gsn_create_legend(wks,3,(/"u*2","v*2","w*2"/),lgres) 4358 amres = True 4359 amres@amParallelPosF = 0.88 4360 amres@amOrthogonalPosF = 0.33 4361 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 4362 overlay(plot(n),plot_us2) 4363 us2=1 4364 else 4365 if (prof3d .EQ. 0)then 4366 varn=varn+1 4367 end if 4368 continue 4369 end if 4370 end if 4371 4372 if (vNam(varn) .EQ. "wsususodz" .OR. \ 4373 vNam(varn) .EQ. "wspsodz" .OR. \ 4374 vNam(varn) .EQ. "wpeodz" .OR. \ 4375 vNam(varn) .EQ. "w*u*u*:dz" .OR. \ 4376 vNam(varn) .EQ. "w*p*:dz" .OR. \ 4377 vNam(varn) .EQ. "w"+dq+"e:dz") then 4378 if (wsususodz .EQ. 0) then 4379 res@gsnLeftString = "w*u*u*:dz, w*p*:dz and w"+dq+"e:dz" 4380 res@tiXAxisString = "("+unit(varn)+")" 4381 res@gsnRightString = " " 4382 if (xs .EQ. -1) then 4383 res@trXMinF = min((/miniwsususodz,\ 4384 miniwspsodz,miniwpeodz/)) 4385 else 4386 res@trXMinF = xs 4387 end if 4388 if (xe .EQ. -1) then 4389 res@trXMaxF = max((/maxiwsususodz,maxiwspsodz,\ 4390 maxiwpeodz/)) 4391 else 4392 res@trXMaxF = xe 4393 end if 4394 if (vNam(varn) .EQ. "wspsodz")then 4395 res@xyDashPattern = 1 4396 end if 4397 if (vNam(varn) .EQ. "wpeodz")then 4398 res@xyDashPattern = 2 4399 end if 4400 plot(n) = gsn_csm_xy(wks,data(varn,:,:),z,res) 4401 4402 ; *************************************************** 4403 ; legend for overlaid plot 4404 ; *************************************************** 4405 4406 lgres = True 4407 lgMonoDashIndex = False 4408 lgres@lgLabelFont = "helvetica" 4409 lgres@lgLabelFontHeightF = font_size_legend*10.0 4410 lgres@vpWidthF = 0.12 4411 lgres@vpHeightF = 0.12 4412 lgres@lgDashIndexes = (/0,1,2/) 4413 lbid = gsn_create_legend(\ 4414 wks,3,(/"w*u*u*:dz","w*p*:dz","w"+dq+"e:dz"/),lgres) 4415 amres = True 4416 amres@amParallelPosF = 0.88 4417 amres@amOrthogonalPosF = 0.33 4418 annoid1 = gsn_add_annotation(plot(n),lbid,amres) 4419 overlay(plot(n),plot_wsususodz) 4420 wsususodz=1 4421 else 4422 if (prof3d .EQ. 0)then 4423 varn=varn+1 4424 end if 4425 continue 4426 end if 4427 end if 4428 n=n+1 4429 if (prof3d .EQ. 0)then 4430 varn=varn+1 4431 end if 4432 end if 4433 end do 4434 end if 4435 4436 if (com_i .NE. 0) then 4437 delete(com_var_avail) 4438 end if 4439 com_var_avail=new(count_var,string) 4440 4441 if (combine .EQ. 1) then 4442 co=0 4443 n_o=0 4444 do varn = 0,dim-1 4445 4446 check = True 4447 4448 if (prof3d .EQ. 0) then 4449 if ( isStrSubset( vNam(varn), "time") .OR. \ 4450 isStrSubset( vNam(varn), "NORM")) then 4451 check = False 4452 end if 4453 else 4454 if ( isStrSubset( vNam(varn), "time") .OR. \ 4455 isStrSubset( vNam(varn), "zusi") .OR. \ 4456 isStrSubset( vNam(varn), "zwwi") .OR. \ 4457 isStrSubset( vNam(varn), "x") .OR. \ 4458 isStrSubset( vNam(varn), "xu") .OR. \ 4459 isStrSubset( vNam(varn), "y") .OR. \ 4460 isStrSubset( vNam(varn), "yv") .OR. \ 4461 isStrSubset( vNam(varn), "zu_3d") .OR. \ 4462 isStrSubset( vNam(varn), "zw_3d")) then 4463 check = False 4464 end if 4465 end if 4466 4467 if (var .NE. "all") then 4468 check = isStrSubset( var,","+vNam(varn)+"," ) 4469 end if 4470 4471 if (check)then 4472 4473 if (prof3d .EQ. 0) then 4474 if (log_z .EQ. 1) then 4475 z = f_att->$vNam(varn+1)$(1:dimz-1) 4476 else 4477 z = f_att->$vNam(varn+1)$ 4478 end if 4479 else 4480 do i=0,b-1 4481 if (isStrSubset( a(i),"zu_3d" ))then 4482 z_v(varn,:) = z_u 4483 if (log_z .EQ. 1) then 4484 z = z_v(varn,1:dimz-1) 4485 else 4486 z = z_v(varn,:) 4487 end if 4488 else 4489 if (isStrSubset( a(i),"zw_3d" ))then 4490 z_v(varn,:) = z_w 4491 if (log_z .EQ. 1) then 4492 z = z_v(varn,1:dimz-1) 4493 else 4494 z = z_v(varn,:) 4495 end if 4496 end if 4497 end if 4498 end do 4499 end if 4500 4501 z=z/norm_z 4502 4503 com_var_avail(n_o)=vNam(varn) 4504 4505 com=isStrSubset( c_var,","+vNam(varn)+"," ) 4506 if (com)then 4507 co = co+1 4508 if (n_o .EQ. 1) then 4509 res@xyDashPattern = 1 4510 else 4511 if (n_o .EQ. 2) then 4512 res@xyDashPattern = 2 4513 else 4514 res@xyDashPattern = 0 4515 res@gsnLeftString = " " ; "Combined Plot of "+c_var_name 4516 res@tiXAxisString = "("+unit(varn)+")" 4517 res@gsnRightString = " " 4518 if (xs .EQ. -1) then 4519 res@trXMinF = min(mini) 4520 else 4521 res@trXMinF = xs 4522 end if 4523 if (xe .EQ. -1) then 4524 res@trXMaxF = max(maxi) 4525 else 4526 res@trXMaxF = xe 4527 end if 4528 end if 4529 end if 4530 label(n_o)=vNam(varn) 4531 color_o(n_o)=237 4532 plot_o(n_o)=gsn_csm_xy(wks,data(varn,:,:),z,res) 4533 n_o=n_o+1 4534 end if 4535 if (prof3d .EQ. 0)then 4536 varn=varn+1 4537 end if 4538 end if 4539 end do 4540 4541 if(number_comb .EQ. 2)then 4542 if (co .EQ. 2)then 4543 overlay(plot_o(0),plot_o(1)) 4544 else 4545 print(" ") 4546 print("combining is not possible,") 4547 print("'c_var'(= "+c_var+") must include two variables of "+\ 4548 "the general plots = ") 4549 print("- "+com_var_avail) 4550 print("be sure to have one comma before and after the variable") 4551 print(" ") 4552 exit 4553 end if 4554 end if 4555 if(number_comb .EQ. 3)then 4556 if (co .EQ. 3)then 4557 overlay(plot_o(0),plot_o(1)) 4558 overlay(plot_o(0),plot_o(2)) 4559 else 4560 print(" ") 4561 print("combining is not possible,") 4562 print("'c_var'(= "+c_var+") must include three variables of "+\ 4563 "the general plots = ") 4564 print("- "+com_var_avail) 4565 print("be sure to have one comma before and after the variable") 4566 print(" ") 4567 exit 4568 end if 4569 end if 4570 4571 ; *************************************************** 4572 ; legend for combined plot 4573 ; *************************************************** 4574 4575 lgres = True 4576 lgMonoDashIndex = False 4577 lgres@lgDashIndexes = (/0,1,2/) 4578 lgres@lgLabelFont = "helvetica" 4579 lgres@vpWidthF = 0.12 4580 lgres@vpHeightF = 0.1 * number_comb / 3.0 + 0.01 4581 lgres@lgLabelFontHeightF = 10.0 * font_size_legend * ((number_comb \ 4582 - 2.0) * 0.35 + 0.65) 4583 4584 lbid = gsn_create_legend(wks,number_comb,label,lgres) 4585 4586 amres = True 4587 amres@amParallelPosF = -0.5 4588 amres@amOrthogonalPosF = -0.5 4589 amres@amJust = "TopLeft" 4590 4591 annoid1 = gsn_add_annotation(plot_o(0),lbid,amres) 4592 4593 plot(0) = plot_o(0) 4594 4595 end if 4596 4597 if (c_var_log .EQ. 1) then 4598 c_var_plot(com_i) = plot(0) 4599 end if 4600 4601 end do 4367 4602 4368 4603 ; *************************************************** … … 4370 4605 ; *************************************************** 4371 4606 4372 do m=0,n-1 4373 plot_(m)=plot(n-1-m) 4374 end do 4607 if (c_var_log .EQ. 1) then 4608 delete(plot_) 4609 plot_=new(max_com_i+1,graphic) 4610 plot_=c_var_plot 4611 n = max_com_i + 1 4612 else 4613 do m=0,n-1 4614 plot_(m)=plot(n-1-m) 4615 end do 4616 end if 4375 4617 4376 4618 no_frames = 0
Note: See TracChangeset
for help on using the changeset viewer.