text:
## Archive for the ‘Professional’ Category

### Further Experiments with Literate Programming

Literate programming comes in many forms and disguises but is essentially the notion that the documentation and programmatic code should be written together, so that the documentation supports the code and vice versa. In this post, I discuss some of the problems with literate programming, my early attempts to circumvent these with respect to ontology development. Finally, I finish up with a description of some new technology which, I think, offers a solution.

## Literate Programming for Ontologies

The reality is, I think, that literate programming has never really take off; there are a large number of reasons for this of course. Code does not naturally have an linear narrative and is not necessarily read in this way: rather, when read by an experienced programmer, they often track the flow of execution through the code . A secondary problem is apparently quite trivial but the editing environment for literate programmes tends to be poor. I cannot find any good research on this, but this is both my experience and that of others .

For ontology development, I think a literate approach seems to make more sense. Again, in my experience, ontologies do have a somewhat more narrative approach than code — at least in the sense that the lack loops and the like.

## Initial Approaches

I have now been experimenting with literate techniques since 2009. The first version used a single latex file, and pulled these out into a Manchester syntax file . This worked quite nicely but suffered from the poor editor problem: I was building ontologies embedded in LaTeX, so lacked even the basic features (such as syntax highlighting) that I got when editing Manchester syntax files directly. This was a problem even with the very limited feature set from tools like omn-mode.el. The disadvantage would have been worse if I had been used to a richer environment for Manchester syntax.

My second attempt was took the opposite approach; now I used two files — a Manchester syntax file and a LaTeX one with a method for referring between the two . This worked okay but had a poor implementation which I later refined .

These approaches have their advantages but do both suffer from a poor editing environment; either in having two files to switch and link between, or favouring documentation over ontology or vice versa. They also suffered from a secondary issue, which is that they are based around Manchester syntax. While this is nice enough, since writing Tawny-OWL , this style of ontology development just feels not rich enough.

## Marginalia

One of the declared advantages of using a real programming language as the basic for Tawny-OWL was the ability to use the tools from that language; I have used a number of these both within Tawny-OWL and with ontologies written with Tawny: mostly obviously, the test environment, but also serialisation, properties support and, of course, the entire editing environment.

This raises the question as to whether I could use literate programming tools from Clojure as well. To my knowledge, the only real option in town here is Marginalia. Marginalia uses markdown as the documentation format and builds a nice presentation with code on one side, and comments on the other.

However, it has problems. Firstly, it presents all comments as text — you cannot comment the comments as it were which is irritating for boilerplate such as licence text. Secondly, the side-by-side presentation breaks the flow of reading as you have to move your eyes around the screen all the time. And, finally, it’s Markdown. While Markdown is nice at what it does, it’s very limited, and I missed the extra power of something like LaTeX.

The main difficulty, though, remains the editing environment. Without special support, while editing the comments show up as just comments. I can never remember the order of brackets in Markdown links — I rely on syntax highlighting to tell me that I have it correct.

Is there a way that Clojure and LaTeX can be made to work together?

My first thought, in experimenting with LaTeX was a remarkably cheap and cheerful one. Consider a document such as this:

 ;; \documentclass{article} ;; \begin{document} ;; \begin{code} (println "hello world") ;; \end{code} ;; \end{document}

This is a valid Clojure file, and is nearly valid latex as well. The only illegal part is that ;; occurs before the documentclass macro, although, in practice having ;; appear randomly throughout the document would not be ideal either.

Now, LaTeX as an embedded markup language has a very plastic syntax, and I have used that in this case. It is actually very easy to just ignore the ; character entirely, through the use of Catcodes; we can put this into a driver file which then inputs our Clojure file like so:

 \catcode;=9 \input{file.clj}

This way we maintain the validity of our Clojure file (otherwise the first line would be illegal). This is a remarkably cheap and cheerful way of achieving our aims; albeit at the cost of losing the ability to use semi-colons in our writing.

## Indirect-buffers

What, however, about the editing environment. My own preferred environment — Emacs — has nice modes which edit both LaTeX and Clojure code, and it is possible to switch between the two, when I want to move between editing code and editing documentation. This is quite clunky, but there is a second option which is “indirect-buffers”. This is a piece of Emacs arcana where two buffers share some of the same data structures but not all, which means that they can have different modes. Unfortunately, my experience is that the buffers share too much — as well as the text, they also share “text-properties” which unfortunately both LaTeX and Clojure mode use. In practice, this means syntax highlighting fails (or rather than two representations fight with each other). As a second problem, although the file is valid LaTeX it is not normal LaTeX; simply things like wrapping text in paragraphs fails because of the ;; comments at the beginning of each line.

So, this experiment fails the editing environment test.

My next attempt was to use block comments. Consider this file which is valid lisp using #| and |# block comments.

 #| \documentclass{article} \begin{document} \begin{code} |# (println "hello world") #| \end{code} \end{document} |#

We can use a similar (but not identical) trick with catcodes to make this valid latex also:

 \catcode#=\active \def#{\catcode#=6} \catcode|=\active \def|{\catcode|=12} \input{hello_world.lisp}

The first call makes the # character active — that is, definable as a macro. We then define # as a macro which will set the catcode of # to 6 (which is it’s default). Then, we do the same with |. The practical upshot of this is that the opening #| does nothing other than reset everything in the driver file; effectively it’s ignored.

This actually works quite nicely in the editing environment; the opening #| effectively makes no difference to Emacs, and the mode works well. The only real disadvantage is that every code block needs two delimiters — one to open the code block in latex, and end the comment in Lisp.

Now there are various multi-mode tools around for Emacs which should help solve the otherwise clunky editing environment, although even here I am not convinced that this is the right route. Multi-mode tools are complex and to some extent are not what I want — when editing code I want to suppress the documentation, give it a low visual immediacy, and when editing documentation, I want the reverse.

There is, however, a bigger problem — while the last example is valid Common Lisp, Clojure does not have block comments, nor does the programmer have the ability to extend the reader in this way. So, while this seems a nice solution, it depends on a specific language feature which Clojure lacks.

## Emacs Experiments: formats

My next idea was to use formats. Emacs allows transformations to happen between the text that is visualised on screen, and how it is saved to file. The main reason for this is to support the many non-ascii text formats that exist. But it is (perhaps unsurprisingly) fully extensible within Emacs and could be used for any purpose. So, why not convert line-commented Clojure on file into block-comments on screen; this will give editable latex on screen and valid Clojure on file and a driver file to give valid Latex on file also.

Unfortunately, it fails. While Emacs latex support is file based, Clojure (and specifically cider) has a tighter integration; it can communicate the contents of a buffer without saving to file. This circumvents the formatting — the block comments are sent to Clojure process which complains.

I am now experimenting with another option. indirect-buffers place exactly the same text (and text-properties) into two buffers. Instead of sharing all the text, why not have two buffers with a function that can transform the text bi-directionally between the two. The practical result is two views over the same content. Surprisingly, this works pretty well, as you can see here even though my current implementation is very simple — the whole buffer is copied every keypress. We could achieve the same thing with indirect-buffers, but as well as simple copying, however, we can also transform the text on the fly so that both buffers are valid for their respective modes.

The broad idea is not that new — it’s similar to web/weave or SWeave for instance, except that it is embedded into the editor; this means we can take advantage of existing support for both languages from the editor and the author gets immediate feedback about the transformation — so messing up the syntax is pretty obvious.

It also provides a superset of functionality provided by other techniques: indirect-buffers as mentioned previously, shadowfile.el (which creates a second copy of a file somewhere else on every save), and it could also mimic shadow.el which generates a secondary file by a command invocation on every save (although an invocation of an external command every keypress would probably not be performant).

The first release of linked-buffer was a month ago. I am currently unhappy with the configuration and will change this so code is in flux at the moment, but I am using it in anger which is a good sign. Currently, it does a latex <-> clojure transformation, but I will add a few more as time goes on.

## Discussion

It has taken me quite a while to get to this stage, and a number of experiments along the way, but my feeling is that I now have a workable literate environment. It also validates my decision to build Tawny . Having a rich textual language for building ontologies is a bit of a game changer; providing programmatic extensions to the language has been helpful, but the access to other tools, git, travis, tests and a repl has really made the difference. Now adding a literate environment to this as well changes the way that I can use ontologies and is a paradigm shift in their development.

## Bibliography

### Tawny 1.0

I am please to announce the first full release of Tawny-OWL, my library for fully programmatic development of OWL ontologies. The library now has a fairly large feature set:

• Complete support for OWL2

• Integrated support for reasoning with HermiT or ELK

• Profile checking

• Fixtures and support macros for unit testing

• Use of external ontologies available only as OWL files

• Rendering of OWL API objects to Tawny code.

• Support for generating and using ontologies with numeric IDs.

• Support for multilingual labels.

Additionally, I now have initial integration with Protege, described later.

The library is now available from clojars or on github.

• Background

A little over a year ago, I first described my experiments with building a programmatic environment for ontology construction . The need arose out of frustration with existing ontology tools; Protege, for example, provides a nice graphical environment, but it has many limitations. It does not easily allow automated generation of ontology entities, for example, and it also does not provide access to tools which are common place in an IDE: versioning tools, diffs, test cases and so forth. While ontology specific variations of these tools do exist, they were not as good as the ones I was used to use when programming.

Tawny seeks to bridge this gap, by using a full programmatic environment to generate OWL ontologies. I chose Clojure because of its syntactic plasticity; at its simplest, when using tawny, it does not feel like a programming language, just a syntax and evaluation engine for writing ontologies. However, the full power of the programming language is there and can be used when necessary .

Since the first blog post, there have now been a further 8, as well as three papers, describing tawny itself , the karyotype ontology and our use of patterns, higher-level abstractions within the karyotype ontology and applied to SIO. From an initial experiment, tawny has become a useful tool which we are using on a daily basis.

• In Early Release

Included in this release is our initial integration with Protege. Tawny builds on the OWL API, which is also the basis for Protege. I always assumed that Protege would be used to view OWL files generated by Tawny, but it is actually possible to integrate them much more comprehensively than this. It is now possible to directly manipulate the data structures of Protege using Tawny; in short, Protege can display what ever tawny has generated immediately, and without a file in between.

We have achieved this in two ways; firstly with protege-tawny which provides a command line environment directly inside Protege. This is useful, but does not provide the rich programmatic IDE that I want. However, the protege-nrepl environment allows exactly this; protege launches Clojure, and launches a NREPL server to which you connect with Emacs, Eclipse or any of the other Clojure IDEs. Finally, lein-sync allows syncing classpaths and dependencies with an existing Clojure project. The practical upshot can be seen in screencast; tawny can be used as normal, with Protege following.

Currently, Protege and Tawny use different versions of the OWL API, so while the protege-nrepl can be used with the current release of Protege, periodic crashes happen. In the meantime, a hand-built distribution of Protege is available including nrepl.

• For the Future

I have three main aims for the next few releases of Tawny. First, we need to provide access to explanation code; currently, this has to be accessed within Protege, which is less than ideal for a process than can take many minutes to run. I wish to integrate this with the Clojure unit test environment so that explanations will be generated by failing test cases.

Second, tawny currently allows the development of ontologies, but does not allow easy querying over them. I have several possibilities here: including integration of a SPARQL engine; the current rendering engine, combined perhaps with core.match, or, finally, fully-fledged support for core.match directly.

Finally, I wish to experiment with and add support for connection points , to better enable modular ontology development.

## Bibliography

### Ontology Connection Points

In this post, I will describe what I call connection points and explain how they can be used to enable modularity and overcome problems with scalability of reasoning in OWL.

One of the recurrent problems with building ontologies is mission creep; what starts simple rapidly expands until many different areas of the world are described.

I faced this problem recently, when I was asked about the axiomatisation that I described in my paper about function . Well, the axiomatisation exists, but it was never very complete; so, I thought I should redo it, probably with Tawny-OWL .

To start off with a simple declaration of function, we might choose something like this:

 (defclass Function :subclass (only realisedIn nProcess))

Or, in rough English, a function is something that displays itself only when involved in a process (the n in nProcess is to avoid a name clash). Now, immediately, we hit the mission-creep problem. Traditionally, functions have been considered to be some strain of continuant, and so it might be expected that we would only need to describe classes that are continuants to define a function. And, yet, straight away, we have a process. To make this definition meaningful, we need to distinguish between processes and everything else, and pretty quickly, our ontology of function requires most of an upper ontology.

This has important consequences. First, if the upper ontology in use is any size at all, or alternatively has a complex axiomatisation, then immediately a lot of axioms have to be reasoned over, and this can take considerable time.

Second, and probably more importantly, the choice of an upper ontology can be quite divisive. We have argued that a single representation for knowledge is neither plausible nor desirable  — this limits the ability to abstract, meaning that all of the complexity has to be dealt with all of the time; in essence, an extreme example of mission creep. If, for example, BFO is used, then the representation of entities whose existence we are unsure about becomes difficult. Conversely, if SIO is used, uncertain objects come regardless.

In the rest of this post, I will describe the how we can use the OWL import mechanism to define what I term connection points to work around this problem.

## Identifiers and Imports

One of the interesting things about OWL is that, as a web based system, it uses global identifiers in the form of IRIs (or URIs, or URLs, as you wish); I can make statements about your concepts, you can make statements about mine. However, not all OWL ontologies share the same axiom space; this is controlled explicitly, through the OWL import mechanism. In short, while you can make statements about my ontology, I do not have to listen. The practical upshot of this is that it is possible to share identifiers between two ontologies without sharing any axioms, or to share axioms in one direction only.

One nice use of this is with a little upper ontology that I built mostly to try out Tawny, called tawny.upper. This comes in two forms, one in EL profile, and one in DL; the latter has more semantics but is slower to reason over. The DL version imports the EL version but, unusually, introduces no new identifiers at all, it just refines the terms in the EL version with the desired additional semantics. Downstream users can switch between EL and DL semantics by simply adding or removing an OWL import statement.

## Alternative forms of import

The ability to share identifiers but not axioms has been used by others, as it provides a partial solution to the problem of big imports. MIREOT , for example, defines an alternative import mechanism. MIREOT is described as a minimal information standard ; in this it is rather simple, as the minimal information required to reference (identify) an ontology term its identifier and that of its ontology. In practice MIREOT is a set of tools that, at its simplest, involves sharing just the identifier and not the semantics. This can help to reduce the size of an ontology significantly.

An extreme use-case for this would be in our karyotype ontology ; if we wished “human” to refer to the NCBI taxonomy, we could import 100,000s of classes to use one, increasing the size of the ontology by several orders of magnitude in the process. One solution is to just use the identifier and not owl import the NCBI taxonomy.

However, this causes two problems. First, following our example we can no longer infer that, for example, a Human karyotype is a Mammalian karyotype; these semantics are present only in the NCBI taxonomy, and we must import its semantics if we wish to know this; similarly, we would be free to state that, for example, a human karyotype was also a fly karyotype. The second problem is that, in tools like Protege, the terms becomes unidentifiable, because the rdfs:label for the term has not been imported, and the NCBI taxonomy uses numeric identifiers.

The MIREOT solution is to extract a subset of the axioms in the upstream ontology, and then import these; obvious subsets would be all the labels of terms used in a downstream ontology, although MIREOT uses a slightly more complex system . This would solve the problem of terms being unidentifiable; still, though, human would not be known to be mammalian. Another subset would be all terms from mammal downwords (with their labels). Now, human would be known to be a mammal, but not known to not be a fly. As you increase the size of the subset, you increase the inferences that you can make, but the reasoning process will get slower.

From my perspective, the second of these seems sensible; large ontologies reason slowly and there is no way around this, until reasoner technology gets better. For this reason, I will probably implement something similar in tawny (with an improvement suggested later). The first, however, seems less justified. We are effectively duplicating all the labels in the upstream ontology, with all this entails, for the purpose of display; we can minimise these problems, by regularly regenerating the imported subset from the source ontology regularly, but this is another task that needs to be done.

Tawny is less affected by this from the start, since the name that a developer uses can exist only in Clojure space; more over, when displaying documentation, tawny can use data from any ontologies, rather than those imported into the current ontology. We do not need to duplicate the MIREOT subset, we just need to know about it.

## Connection Points

While MIREOT is a sensible idea, it is nonetheless seen as a workaround, a compromise solution to a difficult problem . However, in this section, I will discuss a simpler, and more general solution that helps to address the problem of modularity.

Consider, a reworked version of the definition above, with one critical change. The nProcess term is now referencing an independent Clojure namespace. The generated OWL from this ontology will include nProcess simply as a reference.

 (defclass Function :subclass (only realisedIn connection.upper/nProcess))

This is different from the MIREOT approach which maintains that the minimal information is the identifier for the term and the identifier for the ontology. In this case, we only have the former. This difference is important, as I will describe later.

In one sense, we have achieved something negative. We now have a term in our function ontology, with no semantics or annotations. Oops has this in their catalogue of ontology errors:

P8. Missing annotations: ontology terms lack annotations properties. This kind of properties improves the ontology understanding and usability from a user point of view.

— OOPS

However, this problem can be fixed by the editing environment; and, indeed, using Tawny it is. We have a meaningful name, despite a meaningless identifier, and we can see the definition of nProcess should we choose. I call these form of references connectors, and they have interesting properties. In this case, using nProcess is a required connector. The function ontology needs it to have its full semantic meaning, but it is not provided.

So, let us consider how we might use these connection points. First, for this example, we need a small upper ontology; in this case, I use the simplest possible ontology to demonstrate my point.

 (defontology upper) (as-disjoint (defclass nProcess) (defclass NotProcess))

Now, considering our function definition earlier; imagine that we wish to use this in a downstream ontology to define some functions. In this case, we define a child of Function which is realisedIn something which is NotProcess. The simplest possible way of doing this is to use all three of the entities (Function, realisedIn and NotProcess) as required connection points. We import no other ontologies here, so we can infer nothing that is not already stated.

 (defontology use-one) (defclass FunctionChild :subclass connection.function/Function (owl-some connection.function/realisedIn connection.upper/NotProcess))

In our second use, we now import our function ontology. At this point, the value of the shared identifier space starts to show its value; we now understand the semantics of our Function term because it uses the same identifier as the term in the function ontology.

This does, now, allow us to draw an additional inference; any individual of FunctionChild must be realisedIn an instance of NotProcess which, itself, we can infer to be a child of Process because the function ontology claims this. Or, in short, NotProcess and Process cannot be disjoint, if our ontology is to remain coherent. This ontology remains coherent, however, because we have not imported the upper ontology.

 (defontology use-two) (owl-import connection.function/function) ;; this ontology looks much the same as use-one (defclass FunctionChild :subclass connection.function/Function (owl-some connection.function/realisedIn connection.upper/NotProcess))

In the final use, we import both ontologies. The function import allows us to conclude that NotProcess and Process cannot be disjoint, while out upper ontology tells us that they are, and at this point, our ontology becomes incoherent. The required connection point in the function ontology has now been provided by term in our upper ontology.

 (defontology use-three) (owl-import connection.function/function) (owl-import connection.upper/upper) (defclass FunctionChild :subclass connection.function/Function (owl-some connection.function/realisedIn connection.upper/NotProcess))`

The critical point is that while the function ontology references some term in its definition, the exact semantics of that term are not specified. These semantics are at the option of the downstream user of function ontology; in use-three, we have decided to fully specify these semantics. But we could have imported a totally different upper ontology had we chosen, either using the same identifiers, or through a bridge ontology making judicious use of equivalent/sameAs declarations. In short, the semantics has become late binding.

We can use this technique to improve on MIREOT. Instead of importing our derived ontology, we can now use connection points instead. The karyotype ontology can reference the NCBI taxonomy, and leave the end user to choose the semantics they need; if the user wants the whole taxonomy, and is prepared to deal with the reasoning speed, then have this option. This choice can even be made contextually; for example, an OWL import could be added on a continuous integration platform when reasoning time is less important, but not during development or interactive testing.

## Future Work

While the idea of connection points seems sound, it has some difficulties; one obvious problem is that the developer of an ontology must choose the modules, with connection points for themselves. We plan to test this using SIO; we have already been working on a tawnyified version of this, to enable investigation of pattern-driven ontology development. We will build on this work by attempting to modularise the ontology, with connection points between them.

Currently, the use of this form of connection points adds some load to the downstream ontology developer. It would be relatively easy for a developer to build an ontology like use-one or use-two above by mistake, accidentally forgetting to add an OWL import. Originally, when I built tawny, I wanted to automate this process — a Clojure import would mean an OWL import, but decided against it; obviously this was a good thing as it allows the use of connection points. I think we can work around this by adding formal support for connection points, so that for example, the function ontology can declare that nProcess needs to be defined somewhere, and to issue warnings if it it is not.

## Conclusions

In this post, I have addressed the problem of ontology modularity and described the use of connection points, enabling a form of late binding. In essence, we achieve this by building on OWLs web nature — shared identifiers do not presuppose shared semantics, in different ontologies. While further investigation is needed, this could change the nature of ontology engineering, allowing a more modular, more scalable and more pragmatic form of development.

## Bibliography

### Kblog-Include

I have finally got around to releasing kblog-include, a plugin that I first alluded sometime previously . This plugin allows WordPress to transclude content from arXiv and potentially any OAI-PMH repository. When used from arXiv the date, authors and title are set (and advertised if kblog-metadata is installed also), and the abstract is added in place.

I’ve been using this for sometime now; in fact my last article is an example.

Feedback welcome, as always.

## Abstract

A constant influx of new data poses a challenge in keeping the annotation in biological databases current. Most biological databases contain significant quantities of textual annotation, which often contains the richest source of knowledge. Many databases reuse existing knowledge, during the curation process annotations are often propagated between entries. However, this is often not made explicit. Therefore, it can be hard, potentially impossible, for a reader to identify where an annotation originated from. Within this work we attempt to identify annotation provenance and track its subsequent propagation. Specifically, we exploit annotation reuse within the UniProt Knowledgebase (UniProtKB), at the level of individual sentences. We describe a visualisation approach for the provenance and propagation of sentences in UniProtKB which enables a large-scale statistical analysis. Initially levels of sentence reuse within UniProtKB were analysed, showing that reuse is heavily prevalent, which enables the tracking of provenance and propagation. By analysing sentences throughout UniProtKB, a number of interesting propagation patterns were identified, covering over 100, 000 sentences. Over 8000 sentences remain in the database after they have been removed from the entries where they originally occurred. Analysing a subset of these sentences suggest that approximately 30% are erroneous, whilst 35% appear to be inconsistent. These results suggest that being able to visualise sentence propagation and provenance can aid in the determination of the accuracy and quality of textual annotation. Source code and supplementary data are available from the authors website.

• Michael J. Bell
• Matthew Collison
• Phillip Lord

## Plain English Summary

There are many database resources which describe biological entities such as proteins, and genes available to the researcher. These are used by both biologists and medics to understand how biological systems work which has implications for many areas. These databases store information of various sorts, called annotation: some of this is highly organised or structured knowledge; some is free text, written in English.

The quantity of this material available means that having a computation method to check the annotation is desirable. The structured knowledge is easier to check because it is organised. The free text knowledge is much harder.

Most methods of analysing free text are based around “normal” English; biological annotation uses a highly specialised form of English, heavily controlled and with many jargon words. In this paper, we exploit this specialised form to infer provenance, to understand when sentences were first added to the database, and how they change over time. By analysing these patterns of provenance, we were able to identify patterns which are indicative of inconsistency or erroneous annotation.

### Tawny 0.12

I am pleased to announce the release of tawny-owl, Version 0.12.

This package allows users to construct OWL ontologies in a fully programmatic environment, namely Clojure. This means the user can take advantage of programmatic language to automate and abstract the ontology over the development process; also, rather than requiring the creation of ontology specific development environments, a normal programming IDE can be used; finally, a human readable text format means that we can integrate with the standard tooling for versioning and distributed development.

OWL is a W3C standard ontology representation language; an ontology is a fully computable set of statements, describing the things and their relationships. These statements can be reasoned over, inferences made and contradictions detected automatically using an off-the-shelf reasoner.

0.12 is planned to be the final, feature complete release before the 1.0 release. New features will not be added before 1.0. Key new features in 0.12 are:

• Complete support for OWL 2, include data types
• OWL documentation can be queries as normal clojure metadata
• New namespaces, query and fixture
• Completion of rendering functionality
• Regularisation of interfaces: where relevant functions now take an ontology as the first argument.
• Updated to Hermit 1.3.7.3, OWL API 3.4.5

Tawny is available at https://github.com/phillord/tawny-owl, or as a maven artifact from http://clojars.org. The development of tawny-owl is documented in my journal at http://www.russet.org.uk/blog/category/all/professional/tech/tawny-owl


text:
# B. Menci 的序列

#### 样例输入

9 5
++*++***+

#### 样例输出

11001

#### 数据范围与提示

1 $15$ $500$ $10$ -
2 $15$ $500$ $500$ -
3 $20$ $10^5$ $5\times 10^3$ -
4 $20$ $10^6$ $10^6$ 不存在两个相邻的 +
5 $30$ $10^6$ $10^6$ -

format: plain


text:
High Performance Scientific Computing   AMath 483/583 Class Notes   Spring Quarter, 2013

#### Previous topic

Lab 9: Tuesday April 29, 2014

#### Next topic

Lab 11: Tuesday May 6, 2014

# Lab 10: Tuesday May 1, 2014¶

## Programming problem¶

Work on this in groups!

1. The OpenMP code $UWHPSC/labs/lab10/array_omp.f90 contains some bugs. Find the bugs and fix them so that it runs and gives output like this: $ gfortran -fopenmp array_omp.f90
\$ ./a.out
b and bt should be equal
b=
0.270000D+02
0.330000D+02
0.390000D+02
0.450000D+02
0.510000D+02
bt=
0.270000D+02
0.330000D+02
0.390000D+02
0.450000D+02
0.510000D+02

2. If $$A$$ is an $$n \times n$$ matrix and $$x$$ is a vector of length $$n$$, then $$x^TAx$$ is a scalar, a “quadratic form” since it is the sum of terms of the form $$a_{ij}x_ix_j$$ that are quadratic in the elements of $$x$$ .

Write an OpenMP code to compute this for a given matrix and vector. Write out the matrix-vector multiplies as loops and use “omp parallel do” loops to compute first the vector $$Ax$$ and then the inner product of this with the vector x. Test your code using the $$10 \times 10$$ identity matrix for $$A$$ and $$x_i = i$$, in which case the correct answer can be determined to be 385 from the formula

$$\sum_{i=1}^n i^2 = \frac{n(n+1)(2n+1)}6.$$

3. There is a quiz for this lab.


text:
# Angle Modulation MCQ || Angle Modulation Questions and Answers

1. In FM modulation, when the modulation index increases, the transmitted power is

1. Increased
2. Decreased
3. Unchanged
4. None of these

Explanation

The amplitude Ac is constant in a phase-modulated or a frequency-modulated signal. RF power does not depend upon the modulation index.

A general expression for a phase or frequency modulated signal is:

φ(t) = AcCos[ωct + (gKk, m(t))]

m(t) = the modulating signal

ωc = Carrier frequency

kk becomes kc for FM and kp for PM.

The average power (Pavg) is given by:

Pavg = A2c/2

We observe that the transmitted power is independent of the modulation index in case of FM.

2. Reactance modulator and varactor diode are used in the _____ method.

1. DSB –SC generation
2. DSB –SC reception
3. SSB generation
4. FM generation

Explanation

• Reactance modulators are used for the generation of frequency modulation (FM)
• These reactance modulators do not have very good frequency stability. But if it is to be used for broadcast applications, then it is must-have high-frequency stability. It can be achieved through a frequency stabilized reactance modulator.
• The stability of the whole circuit depends on the stability of the discriminator
• As the discriminator is turned to a frequency that is one-twentieth of the drift in the master oscillator frequency. The frequency drift is reduced to a great extent.

3. FM is a part of general class of modulation known as ______

1. Angle modulation
2. Phase modulation
3. Amplitude modulation
4. Frequency modulation

Explanation

Angle modulation is a class of carrier modulation that is used in telecommunications transmission systems.

The class comprises frequency modulation (FM) and phase modulation (PM) and is based on altering the frequency or the phase, respectively, of a carrier signal to encode the message signal.

Angle modulation varies a sinusoidal carrier signal in such a way that the angle of the carrier is varied according to the amplitude of the modulating baseband signal.

4. Foster Seeley discriminator uses a

1. Single tuned circuit
2. Double tuned circuit with primary and secondary tuned to the different frequency
3. Double tuned circuit with primary and secondary tuned to the same frequency
4. None of these

Answer.3. Double tuned circuit with primary and secondary tuned to the same frequency

Explanation

Foster Seeley discriminator is used in the demodulation of FM signal and it uses a double-tuned circuit with primary and secondary tuned to the same frequency.

• Discriminator circuits can generate electrical output directly proportional to the frequency deviation from the unmodulated RF carrier frequency.
• The simplest circuit could be a balanced slope detector.
• Foster Seeley makes use of two resonant circuits i.e Double tuned circuit one off-tuned to one side of unmodulated RF carrier frequency and the other off-tuned to the other side of it.

5. A 20 MHz carrier is modulated by a sinusoid of 1 kHz to produce a peak frequency deviation of 100 kHz. What is the approximate bandwidth? If the modulating signal is changed to 800 kHz, what is the bandwidth?

1. 2 kHz, 1600 kHz
2. 202 kHz, 1600 kHz
3. 202 kHz, 1800 kHz
4. 2 kHz, 1800 kHz

Explanation

According to Carson rule, BW is given as:

B.W = (β + 1) 2fm

B.W. = 2[Δf + fm]

B.W. = 2[Δf + fm]

For β < 1 (NBFM) case, only the adjacent two sidebands are significant and the bandwidth is similar to an AM case, i.e.

BW = 2 × fm

Given:

fc = 20 MHz,

fm = 1 kHz,

Δf = 100 kHz

β = 100k/1k = 100 > 1

So, from Carson rule:

BW = 2(Δf + fm)

BW = 2(100 + 1) = 202 kHz

Now, fm changes to 800 kHz

β = 100k/800k = 0.12 < 1. This is an NBFM signal.

BW = 2 fm = 2 × 800 k = 1600 kHz.

6. FM is called constant envelope because ______ of carrier wave is kept constant.

1. Frequency
2. Amplitude
3. Phase
4. Angle

Explanation

The constant envelope is achieved when a sinusoidal waveform reaches equilibrium in a specific system. In frequency modulation, the carrier amplitude remains constant, but its frequency is changed in accordance with the modulating signal. Specifically, the higher the amplitude of the information signal, the greater the frequency change.

7. Frequency curve is _______

1. Asymptotic to y-axis
2. Non-asymptotic to x-axis
3. Asymptotic to x-axis
4. None of these

Explanation

• Frequency curve is a graph of frequency distribution where the line is smooth.
• It is just like a frequency polygon.
• In the polygon is line is straight, but in the curve the line is smooth.
• It is an area diagram.
• It is the graphical representation of frequency distribution.
• The X-axis is marked with class intervals.
• The frequency curve is Asymptotic to the x-axis. Asymptotic to the x-axis” means that a function or curve is approaching the x-axis but never crosses it.
• The Y-axis is marked with frequencies.
• The beginning and end of the curve should touch the last class interval at the mad posts of the first and last interval.
• The area of the curve is equal to that of a histogram.

8. To produce frequency modulation using a phase modulator

1. The message signal must be integrated and then used for modulation.
2. The message signal must be differentiated and then used for modulation.
3. The phase-modulated signal must be integrated
4. The phase-modulated signal must be differentiated

Answer.1. The message signal must be integrated and then used for modulation.

Explanation

A standard frequency-modulated wave is written in the form:

${S_{FM}}\left( t \right) = A\:cos\left( {2\pi {f_c}t + 2\pi {k_f}\mathop \smallint \limits_0^t m\left( t \right).dt} \right)$

A standard phase-modulated wave is written in the form:

SPm(t) = AcCos[ωct + (Kp, m(t))]

m(t) = the modulating signal

ωc = Carrier frequency

Suppose, x(t) = $\mathop \smallint \limits_0^t m\left( t \right).dt$

When x(t) is applied at the phase modulator we will get the following signal at the output:

$S\left( t \right) = A\:cos\left( {2\pi {f_c}t + {k_p}x(t)} \right)$

putting the value of x(t), we get

$S\left( t \right) = A\:cos\left( {2\pi {f_c}t + {k_p}(\mathop \smallint \limits_0^t m\left( t \right).dt)} \right)$

This signal represents a standard FM signal with

2πkf = kp

9. Which of the following are the two most important classes of angle modulation?

1. Amplitude modulation, frequency modulation
2. Amplitude modulation, phase modulation
3. Frequency modulation, phase modulation
4. Single sideband amplitude modulation, phase modulation

Explanation

Angle modulation is a class of carrier modulation that is used in telecommunications transmission systems. The class comprises frequency modulation (FM) and phase modulation (PM) and is based on altering the frequency or the phase, respectively, of a carrier signal to encode the message signal. Angle modulation varies a sinusoidal carrier signal in such a way that the angle of the carrier is varied according to the amplitude of the modulating baseband signal.

10. Which is true in a frequency modulated system?

1. Variation of carrier amplitude does not affect the quality of reception
2. The amplitude of carrier is varied according to modulating signal
3. The transmission does not require line of sight between transmitter and receiver

Answer.1. Variation of carrier amplitude does not affect the quality of reception

Explanation

• Frequency Modulation is a modulation in which the frequency of the carrier wave is altered according to the instantaneous amplitude of the modulating signal, keeping phase and amplitude constant.
• So, the variation in carrier amplitude and carrier phase does not affect the signal in the receiving end.
• Line of sight (LoS) is a type of propagation that can transmit and receive data only where transmit and receive stations are in view of each other without any sort of an obstacle between them. Eg: FM radio, microwave, and satellite transmission.
• Frequency Modulation works on the Line of sight propagation.

Scroll to Top


text:
# Plan for action!

Objectives
 In this topic you will: practice creating an action plan from a goal image map create a goal image map for your own goal create an action plan for your goal which: includes a statement of why you want to achive your goal and how it will help to make a positive change in your life identifies actions or small steps which will help to achieve the goal identifies how the achievement of each step will be measured identifies barriers that may inhibit the achievement of each step and identifies strategies for overcoming barriers Indentifies enablers that are unique and specific to the achievement of each step. Time: this module should take around 5 hours to complete.

# Preknowledge

 To begin this topic you need to have developed your own SMART goal which you can now develop an action plan for.

Activity
 Visualise your goal. Find or draw a picture/s which represents what your goal will help you to achieve. Divide a large piece of paper into four sections. Place the pictures in the centre of a piece of paper. Have a look at James and Stella's goal image maps displayed below. In each of the four corners write the follow headings How I will feel when I achieve my goal? Barriers: things that will get in the way of me achieving my goal Enablers: things that will help me to achieve my goal Actions or small steps I can take to help me achieve my goal Brainstorm and write as many things on the piece of paper as you can. You may wish to do this over a few days and ask your friends and family for suggestions.

Case Study

Case Study
 James is starting to enjoy the goal setting course. Last week he worked with the rest of the class to understand SMART goals and how to write them. He now has his own SMART goal to focus on: “Talk to at least five potential employers about part time work in the next calendar month.” The trainer explained that although James wants to get a part time job the focus of his goal needs to be on things that he can control. James can see how he is able to prepare and speak with potential employers about part time work but the employer is the one who decides to employ James or not, and he can't have full control over that. James is happy that his goal focuses on things that he has control of and can make happen. This week James has created a goal image map, and he enjoyed searching for pictures which represent how he will look and feel when he has achieved his goal. He finds looking at the image map motivating and it gives him a clear idea of what to focus on. The next step is to use the ideas on the goal image map to create an action plan. This is James' goal image map.

Activity
 This is a group activity. You will need to work in a group with two or three other people. Look carefully at James' goal image map displayed above and work together to develop an action plan for James. This is a practice activity to help you to prepare to develop your own action plan. Your teacher will be able offer you guidance. Compare the action plan which your group has developed for James with action plans developed by other groups. Identify ways in which you could improve the action plan that your group has developed for James. This is a blank action plan form or template which you can use to develop James' action plan: File:Action Plan Template.pdf.

Activity
 Create your own action plan. Look carefully at James and Stella's action plans and see how the ideas developed in the image brainstorm have been used to complete the action plan. You can use the blank form available above for your action plan which has the same layout as James and Stella's action plan, or you can create your own. Use the ideas developed in your image brainstorm in the activity above to complete your action plan. The web resources below will help you to identify posible barriers and enablers for your goal action plan.

# Self Assessment

 Complete the self assessment activity by filling in the table displayed below. This will help you to focus on what you have learnt in this module and to check that you have an effective action plan to move forwards with.

Question Reflective thoughts. Think about the answers to these questions. Discuss your answers with teachers and classmates to check that you have created an effective action plan for your goal.
What steps or actions have I identified in my action plan and how will these help me to achieve my goal?
How will I measure the achievement of each step?
What barriers have I identified in my action plan and how will they be overcome?
What enablers have I identified in my action plan and will these help me to achieve my goal?


text:
Why Does the Deterministic Selection Algorithm Run in $O(n)$ and not $O(n\log n)$?

Here is pseudocode for the algorithm:

select(L,k)
{
if (L has 10 or fewer elements)
{
sort L
return the element in the kth position
}

partition L into subsets S[i] of five elements each
(there will be n/5 subsets total).

for (i = 1 to n/5) do
x[i] = select(S[i],3)

M = select({x[i]}, n/10)

partition L into L1<M, L2=M, L3>M
if (k <= length(L1))
return select(L1,k)
else if (k > length(L1)+length(L2))
return select(L3,k-length(L1)-length(L2))
else return M
}

Here is some analysis of the algorithm: http://www.ics.uci.edu/~eppstein/161/960130.html

The analysis suggests to use the recurrence relation $T(n) \leq \frac{12n}{5} + T(\frac{n}5) + T(\frac{7n}{10})$. Solving this we get linear work for a call. But aren't there log many recursive calls? So that would be $n\log n$.

Put another way, conceptually this algorithm seems like it could be described as "for each call, cut the search area kind of like binary search, but not guaranteed to cut the search area by as much as binary search, and add a linear time partition". Binary search runs in $O(\log(n))$, so adding a linear search per call would make it $O(n\log(n))$.

What am I not understanding about the linked analysis?

• What do you think the recurrence relation should be? Why do you think there are log many recursive calls? Syntactically, I only see two: select(L1,k) and select(L3,k-length(L1)-length(L2)). Also, please proof-rad your formatting and indent/spacing. – D.W. Mar 12 '16 at 5:08
• Hi. I'm not sure, but conceptually the algorithm seems like "cut the search area like binary search, but maybe not by as much as binary search, and add a linear time partition." Binary search runs in O(log(n)). So this would run in O(n*log(n)). The two analyses are opposed. What is wrong with this analysis compared to the recurrence relation presented? – justAnotherGuy Mar 12 '16 at 5:11
• Further: the recurrence relation for binary search is T(n) = T(n/2) + 1, which "telescoped" is "O(log(n))". The given recurrence relation for this algorithm is T(n) <= 12/5n + T(n/5) + T(7n/10). Telescoping in the same way each T(7n/10) term would have an n term plus a T(n/5) term and plus a T(7n/10) term until base case. So it seems this relation "telescopes" to something like T(n) <= n + nlog(n) even discarding the (n/5) term, which is T(n) <= n*log(n) – justAnotherGuy Mar 12 '16 at 5:28
• And there are log many recursive calls because if you do a call each time you cut the size in half (as in binary search), you do log many calls, and this is only guaranteed to cut down the size by .7 each call, which is greater than "in half", so you would do (at least) log many calls. – justAnotherGuy Mar 12 '16 at 5:43

Consider the following series

$S = n + \lceil n/2 \rceil + \lceil n/4 \rceil + ... + 1$

There are $\lceil \log_2 n \rceil + 1$ terms but the sum is less than $2^{\lceil \log_2 n \rceil+1} < 4n$ always.

Similarly, in your algorithm even though you have $\log n$ recursions, each recursion successively does a fraction of work. Hence the total work done in linear in $n$, rather than $\Theta(n \log n)$ as the naive analysis suggests, just similar to the sum of the series above. '

Also note that $T(n)$ is $O(n)$ as well as $O(n\log n)$. This is because $O(n\log n)$ is also an upper bound to $T(n)$ and therefore it is incorrect to say, for example, "Why is $T(n)$ not $O(n\log n)$?".

• I still don't get it. This recurrence: T(N) <= 12/5N + T(N/5) + T(7N/10). MergeSort recurrence: T(N) = 2T(N/2) + N. MergeSort complexity: O(N*log(N)) for the reasons I stated before. If your explanation is right, why is MergeSort complexity not O(N)? – justAnotherGuy Mar 12 '16 at 6:28
• Merge sort is n + (n/2 + n/2) + (n/4 + n/4 + n/4 + n/4) + (n/8 + n/8 + n/8 + n/8 + n/8 + n/8 + n/8 +n/8) ... In each level work does not diminishes, it is same as n. And therefore boils down to $n \log n$ for merge sort. – Shreesh Mar 12 '16 at 6:30
• Total work in k-order statistics is ~ T(N/5) + T(7n/10) ~ C.9n/10 – Shreesh Mar 12 '16 at 6:34
• OK, the intuition is clicking now. Thank you. – justAnotherGuy Mar 12 '16 at 7:03
• It did not help my understanding that in my implementation of the algorithm, I was doing a linear scan of the entire initial array to find the index of the element to partition around. Instead, I should do a linear scan only within the bounds of the subarray. – justAnotherGuy Mar 12 '16 at 7:13


text:
# Linear combination of random variables, convergence for a large number of variables

#### kmkv6dl

Hi,

I have positive random variables X1, X2, X3, ..., Xn such that their sum=1 (so they are random, subject to constraints that each Xi is positive their sum has to be 1.. so all are fractions).

Now, I have a function f=C1.X1+C2.X2+C3.X3.....+Cn.Xn

where C1, C2, ....Cn are known coefficients (real numbers).

My question is: if n tends to infinity, will f converge to some number? Is there any law in statistics which talks about such a scenario?

Thanks.

#### romsek

Math Team
Suppose for a moment that your random variables have very small deviation, i.e. that they are essentially just positive real numbers. Further suppose that

$X_n \approx \dfrac{6}{\pi^2 n^2}$

Finally let $C_n = n$

I'll let you convince yourself the infinite sum of the $X_n$'s is $1$, and that
the weighted sequence does not converge.

You'll need to come up with some constraint on the $C_n$'s

After you've done that you'll need to address what type of convergence you want. There are 4 types of convergence with regard to sequences of random variables. You can wiki that.

#### kmkv6dl

Thank you Romsek, I am actually a Chemical Engineer and a novice in statistics. I am learning statistics for a particular research area in my field. The X's I talked about are mass fractions of different chemicals, so their sum is always 1. I did the wiki search, is the "Central Limit Theorem" relevant for the case I described (convergence of linear combination of random variables)? Thanks.

#### romsek

Math Team
Thank you Romsek, I am actually a Chemical Engineer and a novice in statistics. I am learning statistics for a particular research area in my field. The X's I talked about are mass fractions of different chemicals, so their sum is always 1. I did the wiki search, is the "Central Limit Theorem" relevant for the case I described (convergence of linear combination of random variables)? Thanks.
Ok, so you want to cast these $X_n$'s as a discrete distribution.

And then ask if we take a zillion copies and average them will this converge to a normal distribution.

Again the problem is that unconstrained weights can cause divergence of the averaging sum as n goes to infinity.

If you can specify weights such that this doesn't occur then yes, the Central Limit Theorem will apply.


text:
## Subgroups generated by powers of r are normal in Dih(2n)

Let $D_{2n} = \langle r,s \ |\ r^n = s^2 = 1, rs = sr^{-1} \rangle$ be the usual presentation of the dihedral group of order $2n$ and let $k$ be a positive integer dividing $n$.

1. Prove that $\langle r^k \rangle$ is normal in $D_{2n}$.
2. Prove that $D_{2n}/\langle r^k \rangle \cong D_{2k}$.

1. By a previous exercise it suffices to note that $rr^kr^{-1} = r^k \in \langle r^k \rangle$ and $sr^ks^{-1} = r^{-k} = (r^k)^{-1} \in \langle r^k \rangle$.
2. Define a mapping $\overline{\varphi} : \{ r,s \} \rightarrow D_{2n}/\langle r^k \rangle$ by $r \mapsto r \langle r^k \rangle$ and $s \mapsto s \langle s \langle r^k \rangle$. Note the following.
1. Note that $1 \leq k \leq n$. Now $(r \langle r^k \rangle)^a = r^a \langle r^k \rangle = \langle r^k \rangle$ if and only if $r^a \in \langle r^k \rangle$. The least integer $a$ such that $(r \langle r^k \rangle)^a = \langle r^k \rangle$ is thus $k$.
2. $\overline{\varphi}(s)^2 = s^2 \langle r^k \rangle = \langle r^k \rangle = \overline{1}$, so that $|\overline{\varphi}(s)| = 2$.
3. $\overline{\varphi}(r) \overline{\varphi}(s) = r \langle r^k \rangle \cdot s \langle r^k \rangle = (rs) \langle r^k \rangle = sr^{-1} \langle r^k \rangle$ $= s \langle r^k \rangle \cdot (r \langle r^k \rangle)^{-1} = \overline{\varphi}(s) \overline{\varphi}(r)^{-1}$.
4. Suppose by way of contradiction that $\overline{\varphi}(s) \in \langle \overline{\varphi}(r) \rangle$; then we have $s = r^m$ for some integer $m$, a contradiction.

By a lemma to a previous exercise, $\overline{\varphi}$ induces an injective group homomorphism $\varphi : D_{2k} \rightarrow D_{2n}/\langle r^k \rangle$. Moreover, $\varphi$ is surjective because $(s^ar^b) \langle r^k \rangle = \varphi(s^ar^b)$.


text:
# In an industrial cooling process, water is circulated through a system. If the water is pumped with a speed of 0.45 m/s under a pressure of 400 torr from the first floor through a 6.0-cm diameter pipe, what will be the pressure on the next floor 4.0 m above in a pipe with a diameter of 2.0 cm?

Question
Other
In an industrial cooling process, water is circulated through a system. If the water is pumped with a speed of 0.45 m/s under a pressure of 400 torr from the first floor through a 6.0-cm diameter pipe, what will be the pressure on the next floor 4.0 m above in a pipe with a diameter of 2.0 cm?

2021-02-20
In an industrial cooling process, water is circulated through a system.
If the water is pumped with a speed of($$\displaystyle{v}_{{{1}}}={0.45}\frac{{m}}{{s}}$$)
under a pressure of ($$\displaystyle{P}_{{{1}}}$$ = 400 torr) from the first floor througha($$\displaystyle{D}_{{{1}}}$$ = 6.0cm) diameter pipe,
Let '$$\displaystyle{P}_{{{2}}}$$' be the pressure on the next floor ( h = 4.0 m ) above in a pipe with adiameter of ($$\displaystyle{D}_{{{2}}}$$ = 2.0 cm)
Density of water = $$\displaystyle{1000}{k}\frac{{g}}{{m}^{{{3}}}}$$
From the equation of continuity we have
The rate is $$\displaystyle{A}_{{{1}}}{v}_{{{1}}}={A}_{{{2}}}{v}_{{{2}}}$$
Or, $$\displaystyle{v}_{{{2}}}={A}_{{{1}}}\frac{{v}_{{{1}}}}{{A}_{{{2}}}}$$
Or, $$\displaystyle{v}_{{{2}}}={\left(\frac{{D}_{{{1}}}}{{D}_{{{2}}}}\right)}^{{{2}}}{v}_{{{1}}}$$
Apply; Bernoulli's Theorem
$$\displaystyle{P}_{{{1}}}+{\left(\frac{{1}}{{2}}\right)}{{v}_{{{1}}}^{{{2}}}}+{0}={P}_{{{2}}}+{\left(\frac{{1}}{{2}}\right)}\cdot{{v}_{{{2}}}^{{{2}}}}+{h}\cdot{g}$$
Put the above given values in the above expression , to get'$$\displaystyle{P}_{{{2}}}$$'

### Relevant Questions

Water at a pressure of $$\displaystyle{3.00}\times{10}^{{5}}$$ Pa flows through a horizontal pipe at a speed of 1.00 m/s. the pipe narrows to 1/4 its original diameter. Find the following:
A. The flow speed in the narrow section
B. the pressure in the narrow section
A 75.0-kg man steps off a platform 3.10 m above the ground. Hekeeps his legs straight as he falls, but at the moment his feettouch the ground his knees begin to bend, and, treated as aparticle, he moves an additional 0.60 m before coming torest.
a) what is the speed at the instant his feet touch theground?
b) treating him as a particle, what is his acceleration(magnitude and direction) as he slows down, if the acceleration isassumed to be constant?
c) draw his free-body diagram (see section 4.6). in termsof forces on the diagram, what is the net force on him? usenewton's laws and the results of part (b) to calculate the averageforce his feet exert on the ground while he slows down. expressthis force in newtons and also as a multiple of his weight.
Look Out! A snowball rolls off a barn roof that slopes downward at an angle of 40 degrees . The edge of the roof is 14.0 m above the ground, and the snowball has a speed of 7.00 m/s as it rolls off the roof. Ignore air resistance.
A man 1.9 m tall is standing 4.0 m from the edge of the barn. Will he be hit by the snowball?
A movie stuntman (mass 80.0kg) stands on a window ledge 5.0 mabove the floor. Grabbing a rope attached to a chandelier, heswings down to grapple with the movie's villian (mass 70.0 kg), whois standing directly under the chandelier.(assume that thestuntman's center of mass moves downward 5.0 m. He releasesthe rope just as he reaches the villian).
a) with what speed do the entwined foes start to slide acrossthe floor?
b) if the coefficient of kinetic friction of their bodies withthe floor is 0.250, how far do they slide?
An electron is fired at a speed of $$\displaystyle{v}_{{0}}={5.6}\times{10}^{{6}}$$ m/s and at an angle of $$\displaystyle\theta_{{0}}=–{45}^{\circ}$$ between two parallel conductingplates that are D=2.0 mm apart, as in Figure. Ifthe potential difference between the plates is $$\displaystyle\triangle{V}={100}\ {V}$$, determine (a) how close d the electron will get to the bottom plate and (b) where the electron will strike the top plate.
As depicted in the applet, Albertine finds herself in a very odd contraption. She sits in a reclining chair, in front of a large, compressed spring. The spring is compressed 5.00 m from its equilibrium position, and a glass sits 19.8m from her outstretched foot.
a)Assuming that Albertine's mass is 60.0kg , what is $$\displaystyle\mu_{{k}}$$, the coefficient of kinetic friction between the chair and the waxed floor? Use $$\displaystyle{g}={9.80}\frac{{m}}{{s}^{{2}}}$$ for the magnitude of the acceleration due to gravity. Assume that the value of k found in Part A has three significant figures. Note that if you did not assume that k has three significant figures, it would be impossible to get three significant figures for $$\displaystyle\mu_{{k}}$$, since the length scale along the bottom of the applet does not allow you to measure distances to that accuracy with different values of k.
The bulk density of soil is defined as the mass of dry solidsper unit bulk volume. A high bulk density implies a compact soilwith few pores. Bulk density is an important factor in influencing root development, seedling emergence, and aeration. Let X denotethe bulk density of Pima clay loam. Studies show that X is normally distributed with $$\displaystyle\mu={1.5}$$ and $$\displaystyle\sigma={0.2}\frac{{g}}{{c}}{m}^{{3}}$$.
(a) What is thedensity for X? Sketch a graph of the density function. Indicate onthis graph the probability that X lies between 1.1 and 1.9. Findthis probability.
(b) Find the probability that arandomly selected sample of Pima clay loam will have bulk densityless than $$\displaystyle{0.9}\frac{{g}}{{c}}{m}^{{3}}$$.
(c) Would you be surprised if a randomly selected sample of this type of soil has a bulkdensity in excess of $$\displaystyle{2.0}\frac{{g}}{{c}}{m}^{{3}}$$? Explain, based on theprobability of this occurring.
(d) What point has the property that only 10% of the soil samples have bulk density this high orhigher?
(e) What is the moment generating function for X?


text:
Journal topic
Earth Syst. Sci. Data, 10, 317–324, 2018
https://doi.org/10.5194/essd-10-317-2018
Earth Syst. Sci. Data, 10, 317–324, 2018
https://doi.org/10.5194/essd-10-317-2018

21 Feb 2018

21 Feb 2018

# Surface and top-of-atmosphere radiative feedback kernels for CESM-CAM5

Surface and top-of-atmosphere radiative feedback kernels for CESM-CAM5
Angeline G. Pendergrass, Andrew Conley, and Francis M. Vitt Angeline G. Pendergrass et al.
• National Center for Atmospheric Research, Boulder, CO, 80305, USA

Correspondence: Angeline G. Pendergrass (apgrass@ucar.edu)

Abstract

Radiative kernels at the top of the atmosphere are useful for decomposing changes in atmospheric radiative fluxes due to feedbacks from atmosphere and surface temperature, water vapor, and surface albedo. Here we describe and validate radiative kernels calculated with the large-ensemble version of CAM5, CESM1.1.2, at the top of the atmosphere and the surface. Estimates of the radiative forcing from greenhouse gases and aerosols in RCP8.5 in the CESM large-ensemble simulations are also diagnosed. As an application, feedbacks are calculated for the CESM large ensemble. The kernels are freely available at https://doi.org/10.5065/D6F47MT6, and accompanying software can be downloaded from https://github.com/apendergrass/cam5-kernels.

1 Introduction

A radiative feedback kernel is the radiative response to a small perturbation in, for example, temperature or water vapor. Radiative feedback kernels for the top of the atmosphere (TOA) are useful for decomposing changes in atmospheric radiative fluxes due to feedbacks from atmosphere and surface temperature, water vapor, and surface albedo (Soden and Held, 2006). Radiative kernels at the surface or in the atmospheric column are useful for evaluating the radiative effect on precipitation (Pendergrass and Hartmann, 2014; Previdi, 2010).

Widely used TOA radiative kernels were calculated with the GFDL model (Soden and Held, 2006). Other kernels include those from CAM3 (Shell et al., 2008) and more recently from the MPI-ESM-LR model (Block and Mauritsen, 2013). The only publicly available model-based surface radiative kernels are from ECHAM5 (Previdi, 2010) and MPI-ESM-LR, which is a more recent version of the ECHAM model (discussed in Fläschner et al., 2016). Reanalysis-based kernels generated with ERA-Interim and RRTM are also available (Huang et al., 2017). Not all kernels have been validated to test the accuracy to which total radiative fluxes from a model simulation can be recovered with kernel calculations; examples that have been validated against model calculations of radiative flux due to doubling of carbon dioxide include Shell et al. (2008), Block and Mauritsen (2013), and Huang et al. (2017).

Here we describe and validate radiative kernels calculated with CESM-CAM5 (Hurrell et al., 2013) for the top of the atmosphere and the surface. These radiative feedback kernels were calculated with CESM version 1.1.2, the same as that used for the 40-member CESM large ensemble (Kay et al., 2015). The TOA kernels are an update from CAM3 (Shell et al., 2008). We also include estimates of radiative forcing due to greenhouse gases and aerosols in RCP8.5 in the CESM large-ensemble simulations, which are necessary for calculating the cloud feedback using radiative kernels.

Figure 1Top-of-atmosphere kernels from CESM1(CAM5). Zonal, annual-mean temperature, longwave moisture, and shortwave moisture kernels for all-sky and clear-sky. In panels (e) and (g) all-sky kernels are shown in solid lines and clear-sky kernels in dashed lines. The sign convention is positive downward.

2 Calculations

In order to calculate the radiative feedback kernels, we make offline radiative transfer calculations following the methodology of Soden and Held (2006) with the Parallel Offline Radiative Transfer (PORT; Conley et al., 2013) code, updated for compatibility with CAM5 microphysics and RRTMG radiation (Iacono et al., 2008). We reintegrate the first member of the CESM large ensemble for 1 year to obtain the full instantaneous atmospheric model state, including temperature, mixing ratio, and clouds, to run offline radiative calculations, writing out instantaneous fields every 3 h. All calculations were completed on NCAR's Yellowstone computer system (Computational and Information Systems Laboratory, 2012).

Figure 2Surface kernels from CESM (CAM5). Zonal, annual-mean temperature, longwave moisture, and shortwave moisture kernels for all-sky and clear-sky cases. In panels (e) and (g) all-sky kernels are shown in solid lines and clear-sky kernels in dashed lines. The sign convention is positive downward.

Together, all calculations consumed approximately 200 000 core hours on NCAR's Yellowstone supercomputer. The limiting factor for throughput is the size of PORT input data: 3-hourly 3-D temperature, moisture, and cloud fields; about 7.5 TB of disk space is needed to run 1 month of 3-hourly PORT calculations for each vertical level of each kernel, with 63 global radiative transfer computations per kernel month (control, surface temperature, and albedo each require 1 kernel month, and atmospheric temperature and moisture each require 30). The kernel calculation is run for 1 year. The TOA radiative kernels are shown in Fig. 1, and surface kernels in Fig. 2. The atmospheric column kernel is the difference between these two kernels. The procedure to produce each kernel follows below. To create these plots, the kernels are regridded to standard CMIP5 pressure levels in the troposphere, including pressure weighting (a vertical regridding script is available at https://github.com/apendergrass/cam5-kernels), and then the zonal and annual means are calculated. A description of the physical drivers of the changes in radiative fluxes is available from Ingram (2010) for the TOA and Pendergrass and Hartmann (2014) for the atmospheric column.

### 2.1.1 Atmospheric temperature kernel

To calculate the atmosphere temperature kernel, we perturb the air temperature by 1 K in each hybrid sigma–pressure level at a time, at each grid cell for each 3-hourly instantaneous field. Then we calculate the monthly mean, and take the difference of the TOA and surface radiative fluxes from the control in response to each perturbation. PORT is adjusted so that the hygroscopic growth of aerosols is not affected by the modified temperatures and water vapor concentrations. The calculations are carried out in CESM's hybrid sigma-pressure vertical coordinate and have units of W m−2 K−1 level−1. These hybrid sigma-pressure radiative feedback kernels can be interpolated onto standard CMIP pressure levels (see the description of example code in Sect. 5), as is done for display purposes here; the atmospheric temperature kernel is shown in Fig. 1a, c for the TOA and Fig. 2a, c for the surface.

### 2.1.2 Surface temperature kernel

In CESM, surface temperature enters radiative calculations indirectly via upwelling longwave flux at the surface. To calculate the surface contribution to the temperature kernel, we perturb upwelling surface longwave radiation by an amount consistent with 1 K warming at constant effective emissivity. The surface temperature kernels are shown in Figs. 1, 2e.

### 2.1.3 Atmospheric moisture kernel

The atmospheric moisture kernel is constructed by perturbing the mixing ratio on each hybrid sigma-pressure level by the amount that would result in constant relative-humidity moistening if there were a warming of 1 K. The saturation mixing ratio is calculated for each 3 h instantaneous state using the mixhum_ptd function in NCL (UCAR/NCAR/CISL/TDD, 2015), which calculates saturation with respect to liquid water following List (1951). Code to closely approximate the perturbation with monthly-mean fields using this NCL calculation is provided (dq1k.ncl). As with the temperature kernel, the mixing ratio does not change for the purpose of aerosol radiative properties (hygroscopic growth is held invariant). The moisture kernel is shown in Figs. 1, 2b, d, f, h.

### 2.1.4 Surface albedo kernel

The surface albedo kernel is the change in radiative flux for a 1 % change in surface albedo. The calculation is carried out by perturbing the direct and diffuse shortwave albedos, asdir and asdif, simultaneously by 1 % each. The surface albedo kernel is shown in Figs. 1, 2g.

## 2.2 Forcing

To estimate the radiative forcing, we reintegrate CESM for the year 2096, writing out the fields needed for PORT calculations every 3 h. The baseline for the forcing calculations is the same 2006 control as the kernel calculations. The greenhouse gas and aerosol forcing are shown in Fig. 3.

### 2.2.1 Greenhouse gas forcing

We use the greenhouse gas concentrations (carbon dioxide, methane, CFCs, N2O, and ozone) from 2096 with the tropospheric temperature, mixing ratio, and other radiatively relevant fields from 2006. To account for stratospheric adjustment, we use the 2096 stratospheric temperature and water vapor mixing ratio in the calculation. The tropopause is defined as 100 hPa at the equator and 300 hPa at the poles and varies by cosine of latitude in between, following Soden and Held (2006). The resulting estimate approximates the radiative forcing following the definition of Myhre et al. (2013), though it includes adjustment of water vapor as well as temperature in the stratosphere.

### 2.2.2 Aerosol forcing

To calculate the aerosol forcing, we apply black carbon, sulfate, secondary organic aerosol, primary organic matter, dust, sea salt, and aerosol temperature and mixing ratio from 2096 with temperature, mixing ratio, greenhouse gas, and all other fields from 2006, with no adjustments to the stratosphere. The resulting estimate is the instantaneous radiative forcing.

Figure 3Radiative forcing. Net (LW + SW) radiative forcing under the RCP8.5 scenario diagnosed from CESM (CAM5) for greenhouse gases (a, c) and the direct aerosol radiative forcing (b, d) at the TOA (a, b) and surface (c, d).

3 Validation

Radiative kernels enable a useful but approximate decomposition of the contributions to changes in radiative fluxes. Application of radiative kernels assumes that changes in radiative fluxes are linear with respect to changes in constituents, and that the response to changes in temperature and moisture at different vertical levels are independent. These assumptions are not exactly met, even for clear-sky fluxes (Feldl and Roe, 2013). We undertake a validation exercise focused on quantifying the errors associated with these kernels compared to the climate-model-simulated changes in radiative flux they are targeted at.

Table 1Top-of-atmosphere (TOA) and surface clear-sky radiative responses (Wm−2) for 2096–2006 from CESM1 large-ensemble member 1 (from which the kernels are derived) and the estimated radiative fluxes using the kernels and radiative forcing.

Because the kernel calculation is computationally intensive, it is based on just 1 year. Next, we quantify the error of the kernel-estimated radiative fluxes compared to members 2–40 of the CESM1 large ensemble. This error estimate includes the effect of our choice of a single year, as well as nonlinearity and 3-hourly sampling. The global-mean error for each ensemble member is shown in Fig. 4. The global-mean absolute errors are not especially larger for the ensemble mean than for member 1. The change in TOA LW fluxes has more interannual variability than TOA SW and surface fluxes. The error of global-mean change in radiative flux is similar to member 1 for SW fluxes but larger for LW fluxes (0.9 Wm−2 at both the surface and TOA; not shown). The spatial pattern of ensemble-mean error is shown in Fig. 5. The LW errors, particularly for the surface, are large in the tropics. For the TOA, there are also substantial errors at high latitudes of both hemispheres. The largest errors in the SW are associated with sea-ice edges, the movement of which is not captured well by the kernel method. There are also regions of large error associated with tropical clouds, and at the TOA, there is a bias over Antarctica.

Figure 4Validation across ensemble members. Global-mean absolute error of kernel-estimated clear-sky radiative flux change from 2006 to 2096 for members 2–40 of the CESM1 large ensemble for LW (a, c) and SW (b, d) fluxes at the TOA (a, b) and surface (c, d).

Figure 5Spatial pattern of error. Mean error of kernel-estimated radiative flux change from 2006 to 2096 for members 2–40 of the CESM1 large ensemble for LW (a, c) and SW (b, d) fluxes at the TOA (a, b) and surface (c, d).

Figure 6CESM large-ensemble kernels. Feedback calculation for the CESM 40-member large ensemble using the TOA kernels.

In applications that make use of experiments from models other than CESM (CAM5), errors will also arise due to differences in radiative transfer codes between models (e.g., DeAngelis et al., 2015; Soden et al., 2008); we do not quantify these errors explicitly here, but we do compare feedback decompositions made with other radiative kernels from the literature in Sect. 4.

4 Application

Next we show a sample application of the kernels to the CESM large-ensemble simulations. In order to apply the kernels, one needs monthly changes in temperature, mixing ratio, and surface albedo as well as long-term mean water vapor mixing ratios to calculate the logarithm of water vapor change (Soden et al., 2008). To calculate the cloud feedback, change in cloud radiative effect is also required. Then, the monthly-resolved kernels and changes in atmospheric state are convolved to obtain the changes in radiative flux components. Example code for applying the kernels is available at https://github.com/apendergrass/cam5-kernels.

Table 2Comparison of TOA radiative feedbacks. TOA radiative feedbacks (Wm−2 K−1) averaged over 40 CESM large-ensemble simulations diagnosed with CAM5 radiative kernels, compared against those from CMIP3 model simulations diagnosed with three different kernels as reported by Soden et al. (2008), and MPI-ESM-LR control state kernels and years 21–150 of abrupt carbon dioxide quadrupling simulations from the same model (Block and Mauritsen, 2013).

Table 3Data files comprising the dataset.

We apply the radiative kernels to the CESM large-ensemble integrations to diagnose the top-of-atmosphere radiative feedbacks. The changes in surface and tropospheric temperature, water vapor mixing ratio, surface albedo, and cloud radiative effect are calculated from 30-year averages for each month from each ensemble member, 1976–2005 and 2071–2100. The cloud feedback calculation follows Soden et al. (2008). The global, annual-mean change in radiative flux for each feedback is calculated and then normalized by the change in global-mean surface temperature for each ensemble member; then, the ensemble average is calculated. Results are shown in Table 2 and Fig. 6.

Table 2 shows a comparison between feedback values calculated here and those diagnosed with other kernels and model simulations. Soden et al. (2008) report radiative feedbacks from 14 CMIP3 model simulations using three different sets of radiative kernels from CAM3, GFDL, and CAWCR. The Planck response agrees closely. Water vapor and albedo feedbacks are both within 0.2 Wm−2 K−1. The cloud feedback differs by only 0.1 Wm−2 K−1, despite the fact that Soden et al. (2008) do not account for aerosol radiative forcing. The only notable disagreement is in the lapse rate feedback by 0.4 Wm−2 K−1. Because the Planck feedback agrees closely between the two calculations, the difference is probably not due to the temperature kernel. Instead, it may be caused by differing upper tropospheric temperature amplification between the CMIP3 and CESM large-ensemble simulations or due to underlying differences in the radiation codes. Block and Mauritsen (2013) report radiative feedbacks using MPI-ESM-LR kernels applied to abrupt carbon dioxide quadrupling experiments with the same model (they compare kernels calculated from different base states and apply them to short transient response and more developed long-timescale response; we compare with their control base-state kernels applied to long-timescale climate response because this is most similar to our application). There is remarkably close agreement for all feedbacks, excepting only the water vapor feedback. This could arise from the kernels or from the change in water vapor in the simulations.

5 Code and data availability

The provided dataset includes the four monthly-mean radiative kernels; atmospheric temperature, surface temperature, water vapor, and surface albedo; and radiative forcing from greenhouse gases and aerosols. Data are provided on the CESM hybrid-sigma grid for comparison with CESM simulations. The dataset includes net all-sky and clear-sky radiative fluxes at both the top of the atmosphere and surface. The sign convention is the same as CESM's: shortwave fluxes are positive downward, and longwave fluxes are positive upward. Sample temperature, moisture, surface radiative fluxes, and surface pressure are also included, as well as sample code to facilitate use of the kernels.

The data and code to calculate TOA temperature, water vapor, and albedo feedbacks are available for immediate download at https://zenodo.org/record/997902 (though without directory structure) and through ESGF at https://www.earthsystemgrid.org/dataset/ucar.cgd.ccsm4.cam5-kernels.html (Pendergrass, 2017a). The files included are listed in Table 3. Additional software tools – to regrid the kernels to pressure levels (including CMIP standard levels), and calculate TOA Planck, lapse rate, and cloud feedbacks – are available at https://doi.org/10.5281/zenodo.997899 (Pendergrass, 2017b).

6 Path forward

There is room to improve the accuracy of these and other radiative kernels. Future work could explore new sampling strategies to capture both the diurnal cycle and interannual variability (which would be particularly important for regional applications), directly compare different kernels, and quantify the radiative forcing in climate simulations.

Competing interests
Competing interests.

The authors declare that they have no conflict of interest.

Acknowledgements
Acknowledgements.

William Frey and Ryan Kramer provided valuable feedback on validating the kernels and testing and debugging code. Paulo Ceppi provided valuable feedback on the discussion version of the paper as well as the associated software. Angeline G. Pendergrass was supported by an NCAR Advanced Studies Postdoctoral Research Fellowship and by the Regional and Global Climate Modeling Program (RGCM) of the US Department of Energy's Office of Science (BER), cooperative agreement DE-FC02-97ER62402. NCAR is sponsored by the National Science Foundation. Computing resources were provided by the Climate Simulation Laboratory at NCAR's Computational and Information Systems Laboratory (CISL), sponsored by the National Science Foundation and other agencies.

Edited by: David Carlson
Reviewed by: two anonymous referees

References

Block, K. and Mauritsen, T.: Forcing and feedback in the MPI-ESM-LR coupled model under abruptly quadrupled CO2, J. Adv. Model. Earth Syst., 5, 676–691, https://doi.org/10.1002/jame.20041, 2013.

Computational and Information Systems Laboratory: Yellowstone: IBM iDataPlex System (NCAR Community Computing), available at: http://n2t.net/ark:/85065/d7wd3xhc, 2012.

Conley, A. J., Lamarque, J.-F., Vitt, F., Collins, W. D., and Kiehl, J.: PORT, a CESM tool for the diagnosis of radiative forcing, Geosci. Model Dev., 6, 469–476, https://doi.org/10.5194/gmd-6-469-2013, 2013.

DeAngelis, A. M., Qu, X., Zelinka, M. D., and Hall, A.: An observational radiative constraint on hydrologic cycle intensification, Nature, 528, 249–53, https://doi.org/10.1038/nature15770, 2015.

Feldl, N. and Roe, G. H.: The nonlinear and nonlocal nature of climate feedbacks, J. Climate, 26, 8289–8304, https://doi.org/10.1175/JCLI-D-12-00631.1, 2013.

Fläschner, D., Mauritsen, T., and Stevens, B.: Understanding the intermodel spread in global-mean hydrological sensitivity, J. Climate, 29, 801–817, https://doi.org/10.1175/JCLI-D-15-0351.1, 2016.

Huang, Y., Xia, Y., and Tan, X.: On the pattern of CO2 radiative forcing and poleward energy transport, J. Geophys. Res.-Atmos., 122,, 10578–10593, https://doi.org/10.1002/2017JD027221, 2017.

Hurrell, J. W., Holland, M. M., Gent, P. R., Ghan, S., Kay, J. E., Kushner, P. J., Lamarque, J. F., Large, W. G., Lawrence, D., Lindsay, K., Lipscomb, W. H., Long, M. C., Mahowald, N., Marsh, D. R., Neale, R. B., Rasch, P., Vavrus, S., Vertenstein, M., Bader, D., Collins, W. D., Hack, J. J., Kiehl, J., and Marshall, S.: The Community Earth System Model: A framework for collaborative research, B. Am. Meteorol. Soc., 94, 1339–1360, https://doi.org/10.1175/BAMS-D-12-00121.1, 2013.

Iacono, M. J., Delamere, J. S., Mlawer, E. J., Shephard, M. W., Clough, S. A., and Collins, W. D.: Radiative forcing by long-lived greenhouse gases: Calculations with the AER radiative transfer models, J. Geophys. Res.-Atmos., 113, 2–9, https://doi.org/10.1029/2008JD009944, 2008.

Ingram, W.: A very simple model for the water vapour feedback on climate change, Q. J. Roy. Meteorol. Soc., 136, 30–40, https://doi.org/10.1002/qj.546, 2010.

Kay, J. E., Deser, C., Phillips, A., Mai, A., Hannay, C., Strand, G., Arblaster, J. M., Bates, S. C., Danabasoglu, G., Edwards, J., Holland, M., Kushner, P., Lamarque, J. F., Lawrence, D., Lindsay, K., Middleton, A., Munoz, E., Neale, R., Oleson, K., Polvani, L., and Vertenstein, M.: The Community Earth System Model (CESM) large ensemble project?: A community resource for studying climate change in the presence of internal climate variability, B. Am. Meteorol. Soc., 96, 1333–1349, https://doi.org/10.1175/BAMS-D-13-00255.1, 2015.

List, R. J. (Ed.): Smithsonian meteorological tables, 6th edn., The Smithsonian Institution, Washington, 1951.

Myhre, G., Shindell, D., Bréon, F.-M., Collins, W., Fuglestvedt, J., Huang, J., Koch, D., Lamarque, J.-F., Lee, D., Mendoza, B., Nakajima, T., Robock, A., Stephens, G., Takemura, T., and Zhang, H.: Anthropogenic and Natural Radiative Forcing, in Climate Change 2013: The Physical Science Basis. Contribution of Working Group I to the Fifth Assessment Report of the Intergovernmental Panel on Climate Change, edited by: Stocker, T. F., Qin, D., Plattner, G.-K., Tignor, M., Allen, S. K., Boschung, J., Nauels, A., Xia, Y., Bex, V., and Midgley, P. M., Cambridge University Press, Cambridge, United Kingdom and New York, NY, USA, 2013.

Pendergrass, A. G.: CAM5 Radiative Kernels, UCAR/NCAR Earth Syst. Grid, https://doi.org/10.5065/D6F47MT6, 2017a.

Pendergrass, A. G.: CESM CAM5 Kernel Software, Zenodo, https://doi.org/10.5281/zenodo.997899, 2017b.

Pendergrass, A. G. and Hartmann, D. L.: The atmospheric energy constraint on global-mean precipitation change, J. Climate, 27,, 757–768, https://doi.org/10.1175/JCLI-D-13-00163.1, 2014.

Previdi, M.: Radiative feedbacks on global precipitation, Environ. Res. Lett., 5, 25211, https://doi.org/10.1088/1748-9326/5/2/025211, 2010.

Shell, K. M., Kiehl, J. T., and Shields, C. A.: Using the radiative kernel technique to calculate climate feedbacks in NCAR's Community Atmospheric Model, J. Climate, 21, 2269–2282, https://doi.org/10.1175/2007JCLI2044.1, 2008.

Soden, B. J. and Held, I. M.: An Assessment of Climate Feedbacks in Coupled Ocean – Atmosphere Models, J. Climate, 19, 3354–3360, https://doi.org/10.1175/JCLI9028.1, 2006.

Soden, B. J., Held, I. M., Colman, R. C., Shell, K. M., Kiehl, J. T., and Shields, C. A.: Quantifying climate feedbacks using radiative kernels, J. Climate, 21, 3504–3520, https://doi.org/10.1175/2007JCLI2110.1, 2008.

UCAR/NCAR/CISL/TDD: The NCAR Command Language (NCL), Version 6.3.0, https://doi.org/10.5065/D6WD3XH5, 2015.