doc/tec/evaluation: a1_a3.ncl

File a1_a3.ncl, 16.4 KB (added by weniger, 5 years ago)
Line 
1
2
3
4
5
6; Concepts illustrated:
7;   - Drawing a scatter plot over a map using the "overlay" procedure
8;   - Using gsn_csm_blank_plot to create a scatter plot with filled polygons
9;   - Generating dummy data using "random_uniform"
10;   - Changing the draw order of filled polygons
11;----------------------------------------------------------------------
12load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
13load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
14load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
15
16
17
18
19
20begin
21
22
23;Indizes ÃŒberdenken, besonders bei interpolation (sehe a4_2.f90 an)
24
25nx=335   
26ny=83   
27nz=64   
28
29dx=2.5
30dy=2.5
31
32
33
34
35
36
37;Nahbereich a1-1
38
39;Beginn
40nxnb=72
41nynb=3
42nznb=1
43
44
45;Ende
46nxne=172
47nyne=ny-4
48nzne=16
49
50
51nyh=floattointeger((ny+1)/2.-1)       ;Mitte y-Richtung
52
53;Erlaubte Abweichungen
54W=0.01    ;a1-1, a1-2
55D=0.05
56
57Wc1=0.07   ;c1
58Dc1=0.25
59
60
61
62
63;Verschiebung des Gitters in m
64sdx=230.
65sdy=105.
66
67
68;Normierungspunkt
69xn=-70.
70yn=0.
71zn=75.
72
73
74findin=0.
75findjn=0.
76findkn=0.
77
78upol=new((/nz,ny,nx/),double)
79xupol=new((/nz,ny,nx/),double)
80yupol=new((/nz,ny,nx/),double)
81zupol=new((/nz,ny,nx/),double)
82
83upol4=new((/nz,ny,nx/),double)
84xupol4=new((/nz,ny,nx/),double)
85yupol4=new((/nz,ny,nx/),double)
86zupol4=new((/nz,ny,nx/),double)
87
88upol5=new((/2*nz,2*ny,2*nx/),double)
89xupol5=new((/2*nz,2*ny,2*nx/),double)
90yupol5=new((/2*nz,2*ny,2*nx/),double)
91zupol5=new((/2*nz,2*ny,2*nx/),double)
92
93xspeicher=new((/nx*nz/),double)
94ipos=new((/nx*nz/),integer)
95kpos=new((/nx*nz/),integer)
96
97
98
99;Testfaelle auswaehlen -> 1: ja, 0: nein
100test_a1_1 = 1
101test_a1_2 = 1    ;wenn test_a1_2=1, dann muss test_a1_1=1 sein
102test_a2   = 1    ;wenn test_a2=1, dann muss test_a1_2=1 sein
103test_a3_1 = 1    ;wenn test_a3_1=1, dann muss test_a1_2=1 sein
104test_a3_2 = 1    ;wenn test_a3_2=1, dann muss test_a3_1=1 sein
105
106test_c1   = 1    ;wenn test_c1=1, dann muss test_a1_2=1 sein
107
108print(" ")
109;---------------------------------------------------------------
110;----Einlesen der Daten--------------------------------------------
111;---------------------------------------------------------------
112if(test_a1_1 .ge. 1) then
113f10 = addfile("../OUTPUT/a1-1_av_3d.nc","r")
114dNames = getfilevardims(f10,"time")
115dSizes = getfilevardimsizes(f10,"time")
116tmax=dSizes-1
117t=tmax
118uwind=f10->u(t,:,:,:)       ;u(t,k,j,i)
119wwind=f10->w(t,:,:,:)       ;w(t,k,j,i)
120DKM=f10->km(t,:,:,:)
121hoehe=f10->zu_3d(:)
122xu=f10->xu(:)-sdx
123y=f10->y(:)-sdy
124x=f10->x(:)-sdx
125hoehew=f10->zw_3d(:)
126end if
127
128if(test_a1_2 .ge. 1) then
129f2 = addfile("../OUTPUT/a1-2_av_3d.nc","r")  ;Name der Datei Àndern
130dNames = getfilevardims(f2,"time")
131dSizes = getfilevardimsizes(f2,"time")
132tmax=dSizes-1
133t=tmax
134uwind1=f2->u(t,:,:,:)       ;u(t,k,j,i)
135wwind1=f2->w(t,:,:,:)       ;w(t,k,j,i)
136nznea1_2=26  ; bis 75m Hoehe
137hoehe1=f2->zu_3d(:)
138xu1=f2->xu(:)-sdx
139y1=f2->y(:)-sdy
140x1=f2->x(:)-sdx
141hoehew1=f2->zw_3d(:)
142
143end if
144
145
146if(test_a2 .ge. 1) then
147f3 = addfile("../OUTPUT/a2_av_3d.nc","r")  ;Name der Datei Àndern
148dNames = getfilevardims(f3,"time")
149dSizes = getfilevardimsizes(f3,"time")
150tmax=dSizes-1
151t=tmax
152uwind2=f3->u(t,:,:,:)       ;u(t,k,j,i)
153wwind2=f3->w(t,:,:,:)       ;w(t,k,j,i)
154hoehe2=f3->zu_3d(:)
155xu2=f3->xu(:)-sdx
156y2=f3->y(:)-sdy
157x2=f3->x(:)-sdx
158hoehew2=f3->zw_3d(:)
159nznea1_2=26  ; bis 75m Hoehe
160
161end if
162
163
164if(test_a3_2 .ge. 1) then
165f4 = addfile("../OUTPUT/a3-2_av_3d.nc","r")  ;Name der Datei Àndern
166dNames = getfilevardims(f4,"time")
167dSizes = getfilevardimsizes(f4,"time")
168tmax=dSizes-1
169t=tmax
170uwind3=f4->u(t,:,:,:)       ;u(t,k,j,i)
171wwind3=f4->w(t,:,:,:)       ;w(t,k,j,i)
172
173
174end if
175
176
177
178
179
180
181if(test_c1 .ge. 1) then
182ascii_filename1 = "../comparative_data/C1.dat"
183seismic1 = asciiread(ascii_filename1,(/651,7/),"float")
184 
185vdi=651
186xvdi=new((/vdi/),double)
187yvdi=new((/vdi/),double)
188zvdi=new((/vdi/),double)
189unormvdi=new((/vdi/),double)
190wnormvdi=new((/vdi/),double)
191
192xvdi(:) = seismic1(:,1)
193yvdi(:) = seismic1(:,2)
194zvdi(:) = seismic1(:,3)
195unormvdi(:) = seismic1(:,4)
196wnormvdi(:)  = seismic1(:,6)
197end if
198 
199;---------------------------------------------------------------
200;----Trilineare Interpolation (siehe wikipedia)--------------------------------------------
201;---------------------------------------------------------------
202
203
204;----Am Normierungspunkt--------------------------------------------
205
206;---fuer a1-1-----------
207 if(test_a1_1 .eq. 1) then
208do i=0,nx
209
210if(findin .le.0.) then
211if(xu(i) .ge. xn) then
212in=i
213findin=findin+1.
214
215end if
216end if
217end do
218
219
220do j=0,ny
221if(findjn .le. 0.) then
222if(y(j) .ge. yn) then
223jn=j
224findjn=findjn+1.
225end if
226end if
227end do
228
229
230
231do k=0,nz
232if(findkn .le. 0.) then
233if(hoehe(k) .ge. zn) then
234kn=k
235findkn=findkn+1.
236end if
237end if
238end do
239
240
241
242
243
244xd=(xn-(xu(in-1)))/(xu(in)-(xu(in-1)))
245yd=(yn-(y(jn-1)))/(y(jn)-(y(jn-1)))
246zd=(zn-hoehe(kn-1))/(hoehe(kn)-hoehe(kn-1))
247
248
249
250
251 c00=uwind(kn-1,jn-1,in-1)*(1.-xd)+uwind(kn-1,jn-1,in)*xd
252 c01=uwind(kn,jn-1,in-1)*(1.-xd)+uwind(kn,jn-1,in)*xd
253 c10=uwind(kn-1,jn,in-1)*(1.-xd)+uwind(kn-1,jn,in)*xd
254 c11=uwind(kn,jn,in-1)*(1.-xd)+uwind(kn,jn,in)*xd
255
256
257 c0=c00*(1.-yd)+c10*yd
258 c1=c01*(1.-yd)+c11*yd
259
260 c=c0*(1.-zd)+c1*zd
261 unorm=c
262
263print("Die Windgeschwindigkeit am Normierungspunkt betraegt bei a1-1: "+c+" m/s.")
264print(" ")
265
266end if
267 ;---------fuer a1-2--------------------
268 if(test_a1_2 .eq. 1) then
269 
270 findin=0.
271 findjn=0.
272 findkn=0.
273 
274 do i=0,nx
275
276if(findin .le.0.) then
277if(xu1(i) .ge. xn) then
278in=i
279findin=findin+1.
280
281end if
282end if
283end do
284
285
286do j=0,ny
287if(findjn .le. 0.) then
288if(y1(j) .ge. yn) then
289jn=j
290findjn=findjn+1.
291end if
292end if
293end do
294
295
296
297do k=0,nz
298if(findkn .le. 0.) then
299if(hoehe1(k) .ge. zn) then
300kn=k
301findkn=findkn+1.
302end if
303end if
304end do
305 
306xd=(xn-(xu1(in-1)))/(xu1(in)-(xu1(in-1)))
307yd=(yn-(y1(jn-1)))/(y1(jn)-(y1(jn-1)))
308zd=(zn-hoehe1(kn-1))/(hoehe1(kn)-hoehe1(kn-1))
309
310
311 c00=uwind1(kn-1,jn-1,in-1)*(1.-xd)+uwind1(kn-1,jn-1,in)*xd
312 c01=uwind1(kn,jn-1,in-1)*(1.-xd)+uwind1(kn,jn-1,in)*xd
313 c10=uwind1(kn-1,jn,in-1)*(1.-xd)+uwind1(kn-1,jn,in)*xd
314 c11=uwind1(kn,jn,in-1)*(1.-xd)+uwind1(kn,jn,in)*xd
315
316
317 c0=c00*(1.-yd)+c10*yd
318 c1=c01*(1.-yd)+c11*yd
319
320 c=c0*(1.-zd)+c1*zd
321 
322 unorm1=c
323 
324 print("Die Windgeschwindigkeit am Normierungspunkt betraegt bei a1-2: "+c+" m/s.")
325print(" ")
326 
327 end if
328 
329 ;---------fuer a2--------------------
330 if(test_a2 .eq. 1) then     ;!!!!!!hoehe,xu,y anpassen
331 
332 
333xd=(xn-(xu2(in-1)))/(xu2(in)-(xu2(in-1)))
334yd=(yn-(y2(jn-1)))/(y2(jn)-(y2(jn-1)))
335zd=(zn-hoehe2(kn-1))/(hoehe2(kn)-hoehe2(kn-1))
336
337
338 c00=uwind2(kn-1,jn-1,in-1)*(1.-xd)+uwind2(kn-1,jn-1,in)*xd
339 c01=uwind2(kn,jn-1,in-1)*(1.-xd)+uwind2(kn,jn-1,in)*xd
340 c10=uwind2(kn-1,jn,in-1)*(1.-xd)+uwind2(kn-1,jn,in)*xd
341 c11=uwind2(kn,jn,in-1)*(1.-xd)+uwind2(kn,jn,in)*xd
342
343
344 c0=c00*(1.-yd)+c10*yd
345 c1=c01*(1.-yd)+c11*yd
346
347 c=c0*(1.-zd)+c1*zd
348 
349 unorm2=c
350 
351 
352 print("Die Windgeschwindigkeit am Normierungspunkt betraegt bei a2: "+c+" m/s.")
353print(" ")
354 
355 end if
356
357
358
359
360
361
362;---------------------------------------------------------------
363;----Gitterpunkte fÃŒr VDI Datei C1 bestimmen--------------------------------------------
364;---------------------------------------------------------------
365if(test_c1 .ge. 1) then
366;Initialisierung
367U_zaehl=0.
368W_zaehl=0.
369DKM_zaehl=0.
370U_treffer=0.
371W_treffer=0.
372;----fuer u---------------------
373
374
375do jj=0,vdi-1 ;Schleife ÃŒber einzelne Vergleichspunkte
376
377
378
379findin=0.
380findjn=0.
381findkn=0.
382
383xn=doubletofloat(xvdi(jj))
384yn=doubletofloat(yvdi(jj))
385zn=doubletofloat(zvdi(jj))
386
387do i=1,nx
388if(findin .le.0.) then
389if(xu1(i) .ge. xn) then
390in=i
391findin=findin+1.
392
393end if
394end if
395end do
396
397
398
399
400do j=1,ny
401if(findjn .le. 0.) then
402if(y1(j) .ge. yn) then
403jn=j
404findjn=findjn+1.
405end if
406end if
407end do
408
409
410
411
412do k=1,nz
413if(findkn .le. 0.) then
414if(hoehe1(k) .ge. zn) then
415kn=k
416findkn=findkn+1.
417end if
418end if
419end do
420
421
422
423
424
425xd=(xn-(xu1(in-1)))/(xu1(in)-(xu1(in-1)))
426yd=(yn-(y1(jn-1)))/(y1(jn)-(y1(jn-1)))
427zd=(zn-hoehe1(kn-1))/(hoehe1(kn)-hoehe1(kn-1))
428
429
430 c00=uwind1(kn-1,jn-1,in-1)*(1.-xd)+uwind1(kn-1,jn-1,in)*xd
431 c01=uwind1(kn,jn-1,in-1)*(1.-xd)+uwind1(kn,jn-1,in)*xd
432 c10=uwind1(kn-1,jn,in-1)*(1.-xd)+uwind1(kn-1,jn,in)*xd
433 c11=uwind1(kn,jn,in-1)*(1.-xd)+uwind1(kn,jn,in)*xd
434
435
436 c0=c00*(1.-yd)+c10*yd
437 c1=c01*(1.-yd)+c11*yd
438
439 c=c0*(1.-zd)+c1*zd
440 
441 
442
443 
444 
445 
446
447 
448;----Abweichung von vdi-Wert-----------------------------------------------------
449if(.not. ismissing(c/unorm1) .and. .not. ismissing(unormvdi(jj)) .and. unormvdi(jj) .ne. 0.) then
450
451Dc=abs((c/unorm1-unormvdi(jj))/unormvdi(jj))
452Wc=abs(c/unorm1-unormvdi(jj))
453
454U_zaehl=U_zaehl+1
455
456if(Dc .le. Dc1 .or. Wc .le. Wc1) then
457       U_treffer=U_treffer+1.
458end if
459end if
460
461
462end do
463
464
465
466print("Trefferquote fuer U bei c1: " +U_treffer/U_zaehl*100.+" %")
467
468
469;----fuer w  (anderes Gitter)---------------------
470
471
472do jj=0,vdi-1 ;Schleife ÃŒber einzelne Vergleichspunkte
473
474
475findin=0.
476findjn=0.
477findkn=0.
478
479xn=doubletofloat(xvdi(jj))
480yn=doubletofloat(yvdi(jj))
481zn=doubletofloat(zvdi(jj))
482
483do i=1,nx
484if(findin .le.0.) then
485if(x1(i) .ge. xn) then
486in=i
487findin=findin+1.
488
489end if
490end if
491end do
492
493
494
495
496do j=1,ny
497if(findjn .le. 0.) then
498if(y1(j) .ge. yn) then
499jn=j
500findjn=findjn+1.
501end if
502end if
503end do
504
505
506
507
508do k=1,nz
509if(findkn .le. 0.) then
510if(hoehew1(k) .ge. zn) then
511kn=k
512findkn=findkn+1.
513end if
514end if
515end do
516
517
518xd=(xn-(x1(in-1)))/(x1(in)-(x1(in-1)))
519yd=(yn-(y1(jn-1)))/(y1(jn)-(y1(jn-1)))
520zd=(zn-hoehew1(kn-1))/(hoehew1(kn)-hoehew1(kn-1))
521
522
523
524 c00=wwind1(kn-1,jn-1,in-1)*(1.-xd)+wwind1(kn-1,jn-1,in)*xd
525 c01=wwind1(kn,jn-1,in-1)*(1.-xd)+wwind1(kn,jn-1,in)*xd
526 c10=wwind1(kn-1,jn,in-1)*(1.-xd)+wwind1(kn-1,jn,in)*xd
527 c11=wwind1(kn,jn,in-1)*(1.-xd)+wwind1(kn,jn,in)*xd
528
529
530 c0=c00*(1.-yd)+c10*yd
531 c1=c01*(1.-yd)+c11*yd
532
533 c=c0*(1.-zd)+c1*zd
534 
535
536
537 
538;----Abweichung von vdi-Wert-----------------------------------------------------
539
540if(.not. ismissing(c/unorm1) .and. .not. ismissing(wnormvdi(jj)) .and. wnormvdi(jj) .ne. 0.) then
541
542Dc=abs((c/unorm1-wnormvdi(jj))/wnormvdi(jj))
543Wc=abs(c/unorm1-wnormvdi(jj))
544
545W_zaehl=W_zaehl+1
546
547if(Dc .le. Dc1 .or. Wc .le. Wc1) then
548       W_treffer=W_treffer+1.
549end if
550
551end if
552
553end do
554
555print("Trefferquote fuer W bei c1: " +W_treffer/W_zaehl*100.+" %")
556
557;-----Testfall bestanden?----------------------------
558
559if(U_treffer/U_zaehl*100..gt. 66.  .and. W_treffer/W_zaehl*100..gt. 66. ) then
560print("Testfall c1 bestanden")
561end if
562
563print(" ")
564end if
565;------------------------------------------------------------------
566
567
568
569
570
571
572
573
574
575;---------------------------------------------------------------
576;----Vergleich Homogen--------------------------------------------
577;---------------------------------------------------------------
578
579if(test_a1_1 .eq. 1) then    ;!!!!!!!!!!!!!!!!!!TEST
580;Initialisierung
581U_zaehl=0.
582W_zaehl=0.
583DKM_zaehl=0.
584U_treffer=0.
585W_treffer=0.
586DKM_treffer=0.
587
588
589
590do k=1,nz
591do j=1,ny
592do i=1,nx
593
594
595if(j .ne. nyh) then
596;----u-Komponente-----------
597if(.not. ismissing(uwind(k,j,i)) .and. .not. ismissing(uwind(k,nyh,i))) then
598
599Dc=abs((uwind(k,j,i)-uwind(k,nyh,i))/uwind(k,nyh,i))
600Wc=abs(uwind(k,j,i)-uwind(k,nyh,i))
601
602U_zaehl=U_zaehl+1
603
604if(Dc .le. D .or. Wc .le. W) then
605       U_treffer=U_treffer+1.
606end if
607
608end if
609
610
611;;----w-Komponente---------
612if(.not. ismissing(wwind(k,j,i)) .and. .not. ismissing(wwind(k,nyh,i))) then
613
614Dc=abs((wwind(k,j,i)-wwind(k,nyh,i))/wwind(k,nyh,i))
615Wc=abs(wwind(k,j,i)-wwind(k,nyh,i))
616
617W_zaehl=W_zaehl+1
618
619if(Dc .le. D .or. Wc .le. W) then
620       W_treffer=W_treffer+1.
621end if
622
623end if
624
625;----DKM--------------
626if(.not. ismissing(DKM(k,j,i)) .and. .not. ismissing(DKM(k,nyh,i)) .and. DKM(k,nyh,i) .ne. 0.) then
627
628Dc=abs((DKM(k,j,i)-DKM(k,nyh,i))/DKM(k,nyh,i))
629Wc=abs(DKM(k,j,i)-DKM(k,nyh,i))
630
631DKM_zaehl=DKM_zaehl+1
632
633if(Dc .le. D .or. Wc .le. W) then
634       DKM_treffer=DKM_treffer+1.
635end if
636
637end if
638
639
640end if
641
642end do
643end do
644end do
645
646
647
648print("Trefferquote fuer U bei a1-1: " +U_treffer/U_zaehl*100.+" %")
649
650
651print("Trefferquote fuer W bei a1-1: " +W_treffer/W_zaehl*100.+" %")
652
653
654print("Trefferquote fuer DKM bei a1-1: " +DKM_treffer/DKM_zaehl*100.+" %")
655
656
657if(U_treffer/U_zaehl*100..gt. 95. .and. W_treffer/W_zaehl*100..gt. 95. .and. DKM_treffer/DKM_zaehl*100..gt. 95.) then
658print("Testfall a1-1 bestanden")
659end if
660
661print(" ")
662end if
663
664
665;---------------------------------------------------------------
666;----Vergleich Skalierbarkeit a1-2--------------------------------------------
667;---------------------------------------------------------------
668
669if(test_a1_2 .eq. 1) then
670;Initialisierung
671U_zaehl=0.
672W_zaehl=0.
673DKM_zaehl=0.
674U_treffer=0.
675W_treffer=0.
676
677do k=nznb,nznea1_2
678do i=nxnb,nxne
679
680
681
682
683;u-Komponente
684if(.not. ismissing(uwind(k,nyh,i)/unorm) .and. .not. ismissing(uwind1(k,nyh,i)/unorm1)) then
685
686
687unorma1_1=doubletofloat(uwind(k,nyh,i)/unorm)
688unorma1_2=doubletofloat(uwind1(k,nyh,i)/unorm1)
689
690
691
692Dc=abs((unorma1_2-unorma1_1)/unorma1_1)
693Wc=abs(unorma1_2-unorma1_1)
694
695U_zaehl=U_zaehl+1
696
697if(Dc .le. D .or. Wc .le. W) then
698       U_treffer=U_treffer+1.
699end if
700
701end if
702
703
704;;w-Komponente
705if(.not. ismissing(wwind(k,nyh,i)/unorm) .and. .not. ismissing(wwind1(k,nyh,i)/unorm1)) then
706
707
708wnorma1_1=doubletofloat(wwind(k,nyh,i)/unorm)
709wnorma1_2=doubletofloat(wwind1(k,nyh,i)/unorm1)
710
711Dc=abs((wnorma1_2-wnorma1_1)/wnorma1_1)
712Wc=abs(wnorma1_2-wnorma1_1)
713
714W_zaehl=W_zaehl+1
715
716if(Dc .le. D .or. Wc .le. W) then
717       W_treffer=W_treffer+1.
718end if
719
720end if
721
722end do
723end do
724
725
726
727
728print("Trefferquote fuer U bei a1-2: " +U_treffer/U_zaehl*100.+" %")
729
730
731
732print("Trefferquote fuer W bei a1-2: " +W_treffer/W_zaehl*100.+" %")
733
734
735if(U_treffer/U_zaehl*100..gt. 95. .and. W_treffer/W_zaehl*100..gt. 95.) then
736print("Testfall a1-2 bestanden")
737end if
738print(" ")
739end if
740
741
742;---------------------------------------------------------------
743;----Vergleich Stationaritaet a2--------------------------------------------
744;---------------------------------------------------------------
745
746if(test_a2 .eq. 1) then
747;Initialisierung
748U_zaehl=0.
749W_zaehl=0.
750DKM_zaehl=0.
751U_treffer=0.
752W_treffer=0.
753
754
755unorm1=1.
756unorm2=1.
757
758do k=nznb,nznea1_2
759do i=nxnb,nxne
760
761
762
763
764;u-Komponente
765if(.not. ismissing(uwind1(k,nyh,i)/unorm1) .and. .not. ismissing(uwind2(k,nyh,i)/unorm2)) then
766
767
768unorma2=doubletofloat(uwind2(k,nyh,i)/unorm2)
769unorma1_2=doubletofloat(uwind1(k,nyh,i)/unorm1)
770
771
772
773Dc=abs((unorma2-unorma1_2)/unorma1_2)
774Wc=abs(unorma2-unorma1_2)
775
776U_zaehl=U_zaehl+1
777
778if(Dc .le. D .or. Wc .le. W) then
779       U_treffer=U_treffer+1.
780end if
781
782end if
783
784
785;;w-Komponente
786if(.not. ismissing(wwind1(k,nyh,i)/unorm1) .and. .not. ismissing(wwind2(k,nyh,i)/unorm2)) then
787
788
789wnorma2=doubletofloat(wwind2(k,nyh,i)/unorm2)
790wnorma1_2=doubletofloat(wwind1(k,nyh,i)/unorm1)
791
792Dc=abs((wnorma2-wnorma1_2)/wnorma1_2)
793Wc=abs(wnorma2-wnorma1_2)
794
795W_zaehl=W_zaehl+1
796
797if(Dc .le. D .or. Wc .le. W) then
798       W_treffer=W_treffer+1.
799end if
800
801end if
802
803end do
804end do
805
806
807
808
809print("Trefferquote fuer U bei a2: " +U_treffer/U_zaehl*100.+" %")
810
811
812
813print("Trefferquote fuer W bei a2: " +W_treffer/W_zaehl*100.+" %")
814
815
816if(U_treffer/U_zaehl*100..gt. 95. .and. W_treffer/W_zaehl*100..gt. 95.) then
817print("Testfall a2 bestanden")
818end if
819print(" ")
820end if
821
822
823
824;---------------------------------------------------------------
825;----Advektion, Turbulent, a3-1--------------------------------------------
826;---------------------------------------------------------------
827
828if(test_a3_1 .eq. 1) then
829
830gebaeudeh = 25.
831wirbell = 0.
832l=0
833
834do k=nznb,nznea1_2
835do i=nxnb,nxne
836
837;----Bestimmen der x-Koordinaten, bei denen u negativ ist
838if(.not. ismissing(uwind1(k,nyh,i))) then
839if(uwind1(k,nyh,i) .lt. 0..and. xu1(i) .ge. 12.5 ) then
840l=l+1
841xspeicher(l)=xu(i)
842ipos(l)=i
843kpos(l)=k
844end if
845end if
846
847end do
848end do
849
850
851
852;----das groesste x raussuchen
853maxu=0.
854do m=1,l-1
855if(xspeicher(m) .gt. maxu) then
856maxu=doubletofloat(xspeicher(m))
857ind_i=ipos(m)
858ind_k=kpos(m)
859end if
860end do
861
862
863
864diff=uwind1(ind_k,nyh,ind_i+1)-uwind1(ind_k,nyh,ind_i)
865
866
867
868
869wirbell=maxu-12.5 + dx/(diff/abs(uwind1(ind_k,nyh,ind_i))) ;halbe Gebaeudebreite abziehen
870
871
872print("Die LÀnge des Nachlaufwirbels betrÀgt bei a3-1: " +wirbell+" m")
873
874
875if(wirbell .ge. 4.* gebaeudeh .and. wirbell .le. 5. * gebaeudeh) then
876print("Testfall a3-1 bestanden")
877end if
878
879print(" ")
880end if
881
882
883
884;---------------------------------------------------------------
885;----Advektion, Turbulent, a3-2--------------------------------------------
886;---------------------------------------------------------------
887
888if(test_a3_2 .eq. 1) then
889
890
891wirbell2 = 0.
892l=0
893ipos=0
894kpos=0
895
896do k=nznb,nznea1_2
897do i=nxnb,nxne
898
899;----Bestimmen der x-Koordinaten, bei denen u negativ ist
900if(.not. ismissing(uwind3(k,nyh,i))) then
901if(uwind3(k,nyh,i) .lt. 0..and. xu(i) .ge. 12.5 ) then
902l=l+1
903xspeicher(l)=xu(i)
904ipos(l)=i
905kpos(l)=k
906end if
907end if
908
909end do
910end do
911
912
913
914;----das groesste x raussuchen
915maxu=0.
916do m=1,l-1
917if(xspeicher(m) .gt. maxu) then
918maxu=doubletofloat(xspeicher(m))
919ind_i=ipos(m)
920ind_k=kpos(m)
921end if
922end do
923
924
925
926diff=uwind3(ind_k,nyh,ind_i+1)-uwind3(ind_k,nyh,ind_i)
927
928
929
930wirbell2=maxu-12.5+dx/(diff/abs(uwind3(ind_k,nyh,ind_i)))   ;halbe Gebaeudebreite abziehen
931
932
933print("Die LÀnge des Nachlaufwirbels betrÀgt bei a3-2: " +wirbell2+" m")
934
935
936if(wirbell2 .gt. wirbell) then
937print("Testfall a3-2 bestanden")
938end if
939
940print(" ")
941
942end if
943
944
945
946
947
948
949
950
951end
952