קורס גראדס - שיעור 3 (חלק ב) - כניסה לתוך הקוד

נתנאל531

Well-known member
הקדמה

שיעור 3 - כנסיה לתוך הקוד (חלק א) - http://www.tapuz.co.il/forums/viewmsg/393/179848382/טבע_ומזג_אוויר/מזג_האוויר
שיעור 2 - יצירת מפת משקעים - http://www.tapuz.co.il/forums/viewmsg/393/179827275/טבע_ומזג_אוויר/מזג_האוויר
שיעור 1 - התקנה - http://www.tapuz.co.il/forums/viewmsg/393/179813942/טבע_ומזג_אוויר/מזג_האוויר

בהמשך לשיעור הקודם שבו עסקנו בהסבר הפקודות השונות בחלק הראשון של הסקריפט המוכן ליצירת מפת משקעים, כעת נשלים את הפקודות מהחלק השני של הסקריפט.

תזכורת - יש לעדכן את הקובץ gfs-link.gs למועד ההרצה האחרונה (ולכל הפחות למועד הרצה קיימת, הרצות קודמות נשמרות עד לטווח של שבועיים בלבד), הסבר לביצוע עריכה זו מובא בשיעור מס' 2.

טיפ: ה־OpenGrADS כולל בתוכו זכרון מובנה של הפקודות האחרונות שהוקשו, ניתן לחסוך הקלדה באמצעות מקש ה'חץ למעלה', שמביאה את הפקודות האחרונות שהוקשו באופן כרונולוגי (מהחדש לישן).
 

נתנאל531

Well-known member
‏set poli - הצגת גבולות פוליטיים

פקודה שנשכחה בשיעור הקודם - מאפשרת הצגת / הסתרת גבולות מדיניים (לפי הגדרות מחלקת המדינה של ארצות הברית, poli מלשון פוליטיקה), מקבלת את הערכים on / off. כברירת מחדל הפקודה על on כדי להקל על הזיהוי במפה, העברה ל־off מציגה גבולות גאוגרפיים בלבד.

תצלומסך למפה עם set poli off.

 

נתנאל531

Well-known member
יצירת סקאלת צבעים

למעשה אין חובה להגדרת סקאלת צבעים, ה־GrADS יצייר לנו סקאלה לפי רצונו אם לא נבחר אחת, אבל התוצאה לא תהיה יפה מדי.

בסקריפט זה סקאלת הצבעים נמצאת בקבצים עזר נפרדים משיקולי קיצור הקובץ ואפשרות קלה להחליף בין סקאלות צבעים. החלפה בין סקאלות הצבעים מתאפשרת באמצעות תיוג הסקאלה בה לא מעוניינים ב־# בתחילתה, והסרת התיוג מהקריאה לקובץ הסקאלה בה מעוניינים, תזכורות שתיוג # בתחילת שורה משמעו שורה שלא לביצוע (שורת הסבר, פקודה לא לביצוע וכו').

ניתן להבחין שהקובץ מכיל 3 פקודות בלבד (כאשר set rgb חוזרת מספר פעמים)

 

נתנאל531

Well-known member
‏set rgb - הגדרת צבע

ל־GrADS כברירת מחדל 16 צבעים בלבד, וניתן להגדיר עד כאלף צבעים נוספים.

הפקודה set rgb מקבלת את מספר הקוד שבחרנו לצבע החדש, ואת 3 ערכי צבעי היסוד של הצבע החדש לפי סקאלת rgb.

(להרחבה בנושא סקאלת rgb ‏- https://he.wikipedia.org/wiki/ייצוג_צבע_במחשב)

מספר הקוד של הצבע חייב להיות מעל 16, מאחר והמספרים הראשונים שמורים לצבעי היסוד של GrADS. ישנה הגבלה גם כלפי מעלה, שמתחילה במספר תלת/ארבע ספרתי, תלוי בגרסת ה־GrADS. בפועל קבוצת המספרים שבין 16 ל־99 מספיקה ל־99.9% מהמטלות.

(בפרק ההרחבה הסבר טכני כיצד למצוא את הערך המספרי של צבע ידוע, וכיצד ניתן 'לשדוד' את ההגדרות המספריות של סקאלות צבעים ידועות)
 

נתנאל531

Well-known member
set clevs - ערכים לסקאלה

פקודה זו מגדירה את מספרי הגבולות של הסקאלה, לדוגמא אם נרצה להציג מפת משקעים שבה יופיעו בצבעים שונים אזורים בהם חזויים מתחת ל־1 מ"מ / בין 1 ל־5 ומעל 5, הפקודה תהיה:
set clevs 1 5
לשים לב שהפקודה בזו מגדירה גבולות בין ערכים (במקרה שלנו - בין אזורי צבע), ולכן מספר אזורי הצבע תמיד יהיה גדול ב־1 ממספר הערכים. נחזור שוב: בפקודה זו הוגדרו 3 ערכים והם x<1 ,5>x>1 ,x>5.
 

נתנאל531

Well-known member
set ccols - צבעים לסקאלה

לאחר שהגדרנו בפקודה הקודמת את הערכים, כעת מגדירים מה הצבע לכל ערך, לשים לב שמספר הערכים בשורה זו תמיד גדול ב־1 ממספר הערכים בשורה הקודמת, במידה ואין התאמה בין השורות, תהיה הודעת שגיאה או שה־GrADS ישלים צבעים כטוב ליבו.

הפקודה -
set ccols 17 18 19
משמעה צבע 17 לערך הראשון (משמאל), במקרה שלנו x<1, צבע 18 לערך השני (5>x>‏1), וצבע 19 לערך השלישי (x>5). ערכי המספרים לפקודה זו צריכים להיות תואמים להגדרות צבעים ידועות (צבעי יסוד, בין 0 ל־15) או לצבעים שהוגדרו בפקודה set rgb.
 

נתנאל531

Well-known member
set xlopts / ylopts

פקודות אלו מגדירות את צורת ההצגה של ציר ה־X וציר ה־Y (בהתאמה) במפה.

הפקודה מקבלת 3 ערכים לאחריה, הראשון הוא צבע (קוד הצבע צריך להיות אחד מצבעי היסוד (0-15) או צבע שהוגדר קודם לכן בפקודה 'set rgb'), השני הוא עובי, והשלישי הוא גודל. לרוב אין צורך לגעת בהגדרה זו.

מצורף תצלומסך של הפקודה set xlopts / ylopts 5 9 0.15

 

נתנאל531

Well-known member
set xlint / ylint

פקודות אלו מגדירות את המרווחים שבין הנקודות השונות בציר ה־X וה־Y בהתאמה (הם יכולות לקבל ערכים לא שלמים וקטנים מ־1). שימושי בעיקר כשרוצים להגדיל מפות, והנקודות על הציר צפופות מדי.

טיפ: אפשר להעלים כליל את הופעת הערכים על הצירים אם לפקודה זו נבחרים ערכים גבוהים משטח המפה.

תצלומסך של הפקודה set xlint / ylint 4

 

נתנאל531

Well-known member
set grid / set grads

set grid -
פקודה זו מאפשרת להציג / להסתיר את קווי הצירים על המפה, ומקבלת את הערכים on ו־off.

set grads -
פקודה זו מאפשרת להציג / להסתיר שורת קרדיט ל־GrADS על גבי כל ציור שנוצר בה, ומקבלת את הערכים on ו־off.

תצלומסך של הפקודות set grid on / set grads on

 

נתנאל531

Well-known member
הצירים לא מספיק בולטים בתמונה

נסו בעצמכם.
&nbsp
בנוסף, הפקודה set grads on מציגה תאריך ושעת ביצוע בפינה הימנית-תחתונה.
 

נתנאל531

Well-known member
set gxout

עד כה כל הפקודות היו כלליות, כעת קבוצת פקודות הציור העיקריות. פקודה זו מאפשרת לבחור את הצורה שבה יופק הפלט הגרפי: עמודות / גרף / הצללה / קווים ועוד. במקרה של מפת משקעים נבחר shaded - מוצלל.
 

נתנאל531

Well-known member
d sum

זו הפקודה שהיא לב הסקריפט, והיא זו שמציירת בפועל לאחר שקיבלה הוראות ציור מכל הפקודות שקדמו לה. d היא קיצור של draw.

פקודת הציור בסקריפט זה:
d sum(apcpsfc,t='t1+2',t='t2',2)‎
‏משמעה ציור סכום הערכים של הביטוי apcpsfc, לטווח שבין t1+2 לבין t2 (ובקפיצות של 2)

הביטוי aspcsfc של GFS הוא סכום המשקעים שמגיעים לקרקע (sfc=surface) במהלך 6 השעות שקדמו לערך הזמן שלו (קובץ הנתונים של פלט המודל הוא כעין טבלה, ובה מופיע ערך הביטוי aspcsfc לכל נקודה גאוגרפית, ולכל טווח זמן שהקובץ כולל).

כזכור (מהשיעור הקודם) t1 ו־t2 הם גבולות הזמן שאנו מעוניינים בנתונים לגביו, אם כן למה מוסיפים ל־t1 ‏2? בגלל שכל ערך כולל את טווח 6 השעות שקודמות לו. לכן אם אנו רוצים טווח של 24 שעות ונגדיר t1=9 ו־t1=17 (טווח 24-48 משעת הש'), בפועל נקבל את הטווח 18-48, לכן ישנה הקפצה ב־2.

כזכור (משיעור קודם), בסקריפט זה של GFS משתמשים בערכי זמן אי-זוגיים בלבד, מאחר וכל ערך אי-זוגי כולל את נתוני המשקעים של 6 השעות הקודמות, בעוד ערכים זוגיים כוללים את סכום 3 השעות שקדמו לו, כך שיש כפילות וסכום 3 השעות מופיע פעמיים (פעם לבד ופעם ביחד עם 3 השעות הבאות כסכום 6 שעות), לכן משתמשים בערכים אי-זוגיים בלבד.

בנוסף בנוסחה ישנו פרמטר נוסף לאחר טווח הזמן (2,) שבא להגדיר את חישוב הסכום בדילוג של 2. כפי שהתבאר, חישוב נכון של משקעים מבוצע על ידי חישוב הערכים של טווחי הזמן האי-זוגיים בלבד, אך כברירת מחדל הפקודה sum מחברת את כל הערכים שבטווח שקיבלה (בסקריפט זה - בין t1 ל־t2), כולל הזוגיים. הערך הנוסף (2,) משמעו לחשב את הערכים בטווח שניתן בדילוג של 2, כלומר רק הערכים האי-זוגיים.

נוסחת החישוב הינה מעט מורכבת, לא חייבים להבין אותה לגמרי, רק לשים לב שהיא מתאימה באופן בלעדי ל־GFS, מודלים אחרים שלהם ערכים עקביים של סכום המשקעים החזוי של 3 השעות הקודמות, הנוסחה שלהם תהיה שונה מעט.

בקיצור, פקודה זו בצירוף הוראות הציור שניתנו לה קודם לכן מציירת מפת משקעים לטווח שהוגדר לה.
 

נתנאל531

Well-known member
cbran (cb5.gs)‎

לאחר הציור בפועל של המפה ישנה קריאה לקובץ עזר שתפקידו לצייר מקרא סקאלת צבעים. הקובץ קרוי cabrn (או cb5 ושמות דומים אחרים), והוא קובץ עזר שמגיע יחד עם ה־GrADS ובשימוש עולמי נרחב. מי שיעיין בו יראה שהוא קובץ שכתוב ברמה גבוהה למדי, הרבה מעבר לרמה המתוכננת לקורס זה, מסיבה זו לא נכנס לתוכו (בעצמי איני מבין את הכתוב בו).

אפשר לשלוט במיקום הסקאלה (לרוחב או לאורך) באמצעות ערכים הנשלחים אליו:
run <path>cb5.gs 1 0
משמעו סקאלה לרוחב,
run <path>cb5.gs 1 1
משמעו סקאלה לאורך.
 

נתנאל531

Well-known member
חלקו השלישי והאחרון של הקובץ

בחלק זה מבוצע עיבוד של הכותרת והדפסת הציור לקובץ תמונה.

 

נתנאל531

Well-known member
יצירת תוכן לכותרת

קובץ נתונים של פלט מודל מחולק תמיד לפרוסות זמן עוקבות, כאשר הראשונה היא ניתוח המצב הקיים בשעת הש' (ניתוח מצב קיים ולא חיזוי מצב עתידי, ככל פרוסות הזמן האחרות). הפקודה:
set t 1
משמעה בחירת פרוסת הזמן הראשונה (שעת הש')
הפקודה q משמעה query, כלומר שאילתא לנתונים שונים של הקובץ.

q time - משמעו שאילתא לזמן הקלנדרי של פרוסת הזמן שנבחרה. בסקריפט מבוצעת תחילה שאילתה על התאריך הקלנדרי של שעת הש' של המודל, ולאחר מכן מבוצעת שאילתא על טווחי הזמן שהוגדרו לציור מפת המשקעים.
הפקודות subwrd ו־substr הם פקודות לסינון טקסט, והם מוציאות חלקים מתוך המחרוזת שהתקבלה מהשאילתה q time, כדי לעצב כותרת לפי רצוננו.

תשומת לב לכך שהקוד מכוון ליצירת כותרת דינאמית התלויה בלעדית בערכים שהוזנו ל־t1 ו־t2 (טווח הזמן ליצירת מפת משקעים), ואינה תלויה בהגדרות אחרות. היא גם מסייעת לוודא שהוזנו הערכים הנכונים לטווח מפת המשקעים.

בתמונה המצורפת דוגמאות לפלט שמתקבל מהרצת פקודות אלו.

 

נתנאל531

Well-known member
draw title

פקודה זו מציגה כותרת, לשים לב שטקסט נמצא בתוך טווח הגרש־ים, בעוד שמות משתנים נמצאים מחוצה להם. הסלש (/) באמצע משמעו מעבר שורה.

מתחת לפקודה זו מופיעים מספר שורות של פקודות מתוייגות שלא לביצוע שמאפשרות שליטה רבה יותר בהצגת הטקסט בכותרת, מאחר ופקודה זו (draw title) לא מאפשרת שינוי גודל וצבע הכותרת, או שינוי מיקום. בפרקים הבאים נשתמש בשורות כעין אלו, שהם תחליף ליצירת שורת כותרת סטנדרטית.
 
למעלה